blob: 10b4e4d62631114a59589397db310084931e4be4 [file] [log] [blame]
Hal Finkel18ee7c12015-02-26 14:22:41 +00001; RUN: opt -S -instcombine < %s | FileCheck %s
2target datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-f128:128:128-v128:128:128-n32:64"
3target triple = "powerpc64-unknown-linux-gnu"
4
5declare <4 x i32> @llvm.ppc.altivec.lvx(i8*) #1
6
7define <4 x i32> @test1(<4 x i32>* %h) #0 {
8entry:
David Blaikie79e6c742015-02-27 19:29:02 +00009 %h1 = getelementptr <4 x i32>, <4 x i32>* %h, i64 1
Hal Finkel18ee7c12015-02-26 14:22:41 +000010 %hv = bitcast <4 x i32>* %h1 to i8*
11 %vl = call <4 x i32> @llvm.ppc.altivec.lvx(i8* %hv)
12
13; CHECK-LABEL: @test1
14; CHECK: @llvm.ppc.altivec.lvx
15; CHECK: ret <4 x i32>
16
David Blaikiea79ac142015-02-27 21:17:42 +000017 %v0 = load <4 x i32>, <4 x i32>* %h, align 8
Hal Finkel18ee7c12015-02-26 14:22:41 +000018 %a = add <4 x i32> %v0, %vl
19 ret <4 x i32> %a
20}
21
22define <4 x i32> @test1a(<4 x i32>* align 16 %h) #0 {
23entry:
David Blaikie79e6c742015-02-27 19:29:02 +000024 %h1 = getelementptr <4 x i32>, <4 x i32>* %h, i64 1
Hal Finkel18ee7c12015-02-26 14:22:41 +000025 %hv = bitcast <4 x i32>* %h1 to i8*
26 %vl = call <4 x i32> @llvm.ppc.altivec.lvx(i8* %hv)
27
28; CHECK-LABEL: @test1a
29; CHECK-NOT: @llvm.ppc.altivec.lvx
30; CHECK: ret <4 x i32>
31
David Blaikiea79ac142015-02-27 21:17:42 +000032 %v0 = load <4 x i32>, <4 x i32>* %h, align 8
Hal Finkel18ee7c12015-02-26 14:22:41 +000033 %a = add <4 x i32> %v0, %vl
34 ret <4 x i32> %a
35}
36
37declare void @llvm.ppc.altivec.stvx(<4 x i32>, i8*) #0
38
39define <4 x i32> @test2(<4 x i32>* %h, <4 x i32> %d) #0 {
40entry:
David Blaikie79e6c742015-02-27 19:29:02 +000041 %h1 = getelementptr <4 x i32>, <4 x i32>* %h, i64 1
Hal Finkel18ee7c12015-02-26 14:22:41 +000042 %hv = bitcast <4 x i32>* %h1 to i8*
43 call void @llvm.ppc.altivec.stvx(<4 x i32> %d, i8* %hv)
44
David Blaikiea79ac142015-02-27 21:17:42 +000045 %v0 = load <4 x i32>, <4 x i32>* %h, align 8
Hal Finkel18ee7c12015-02-26 14:22:41 +000046 ret <4 x i32> %v0
47
48; CHECK-LABEL: @test2
49; CHECK: @llvm.ppc.altivec.stvx
50; CHECK: ret <4 x i32>
51}
52
53define <4 x i32> @test2a(<4 x i32>* align 16 %h, <4 x i32> %d) #0 {
54entry:
David Blaikie79e6c742015-02-27 19:29:02 +000055 %h1 = getelementptr <4 x i32>, <4 x i32>* %h, i64 1
Hal Finkel18ee7c12015-02-26 14:22:41 +000056 %hv = bitcast <4 x i32>* %h1 to i8*
57 call void @llvm.ppc.altivec.stvx(<4 x i32> %d, i8* %hv)
58
David Blaikiea79ac142015-02-27 21:17:42 +000059 %v0 = load <4 x i32>, <4 x i32>* %h, align 8
Hal Finkel18ee7c12015-02-26 14:22:41 +000060 ret <4 x i32> %v0
61
62; CHECK-LABEL: @test2
63; CHECK-NOT: @llvm.ppc.altivec.stvx
64; CHECK: ret <4 x i32>
65}
66
67declare <4 x i32> @llvm.ppc.altivec.lvxl(i8*) #1
68
69define <4 x i32> @test1l(<4 x i32>* %h) #0 {
70entry:
David Blaikie79e6c742015-02-27 19:29:02 +000071 %h1 = getelementptr <4 x i32>, <4 x i32>* %h, i64 1
Hal Finkel18ee7c12015-02-26 14:22:41 +000072 %hv = bitcast <4 x i32>* %h1 to i8*
73 %vl = call <4 x i32> @llvm.ppc.altivec.lvxl(i8* %hv)
74
75; CHECK-LABEL: @test1l
76; CHECK: @llvm.ppc.altivec.lvxl
77; CHECK: ret <4 x i32>
78
David Blaikiea79ac142015-02-27 21:17:42 +000079 %v0 = load <4 x i32>, <4 x i32>* %h, align 8
Hal Finkel18ee7c12015-02-26 14:22:41 +000080 %a = add <4 x i32> %v0, %vl
81 ret <4 x i32> %a
82}
83
84define <4 x i32> @test1la(<4 x i32>* align 16 %h) #0 {
85entry:
David Blaikie79e6c742015-02-27 19:29:02 +000086 %h1 = getelementptr <4 x i32>, <4 x i32>* %h, i64 1
Hal Finkel18ee7c12015-02-26 14:22:41 +000087 %hv = bitcast <4 x i32>* %h1 to i8*
88 %vl = call <4 x i32> @llvm.ppc.altivec.lvxl(i8* %hv)
89
90; CHECK-LABEL: @test1la
91; CHECK-NOT: @llvm.ppc.altivec.lvxl
92; CHECK: ret <4 x i32>
93
David Blaikiea79ac142015-02-27 21:17:42 +000094 %v0 = load <4 x i32>, <4 x i32>* %h, align 8
Hal Finkel18ee7c12015-02-26 14:22:41 +000095 %a = add <4 x i32> %v0, %vl
96 ret <4 x i32> %a
97}
98
99declare void @llvm.ppc.altivec.stvxl(<4 x i32>, i8*) #0
100
101define <4 x i32> @test2l(<4 x i32>* %h, <4 x i32> %d) #0 {
102entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000103 %h1 = getelementptr <4 x i32>, <4 x i32>* %h, i64 1
Hal Finkel18ee7c12015-02-26 14:22:41 +0000104 %hv = bitcast <4 x i32>* %h1 to i8*
105 call void @llvm.ppc.altivec.stvxl(<4 x i32> %d, i8* %hv)
106
David Blaikiea79ac142015-02-27 21:17:42 +0000107 %v0 = load <4 x i32>, <4 x i32>* %h, align 8
Hal Finkel18ee7c12015-02-26 14:22:41 +0000108 ret <4 x i32> %v0
109
110; CHECK-LABEL: @test2l
111; CHECK: @llvm.ppc.altivec.stvxl
112; CHECK: ret <4 x i32>
113}
114
115define <4 x i32> @test2la(<4 x i32>* align 16 %h, <4 x i32> %d) #0 {
116entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000117 %h1 = getelementptr <4 x i32>, <4 x i32>* %h, i64 1
Hal Finkel18ee7c12015-02-26 14:22:41 +0000118 %hv = bitcast <4 x i32>* %h1 to i8*
119 call void @llvm.ppc.altivec.stvxl(<4 x i32> %d, i8* %hv)
120
David Blaikiea79ac142015-02-27 21:17:42 +0000121 %v0 = load <4 x i32>, <4 x i32>* %h, align 8
Hal Finkel18ee7c12015-02-26 14:22:41 +0000122 ret <4 x i32> %v0
123
124; CHECK-LABEL: @test2l
125; CHECK-NOT: @llvm.ppc.altivec.stvxl
126; CHECK: ret <4 x i32>
127}
128
129attributes #0 = { nounwind }
130attributes #1 = { nounwind readonly }
131