1616; which is part of DecomposePtrExp, used to calculate base from bitcast
1717; or a getelementptr instruction.
1818
19- ; TODO: check, with opaque pointers on, pass doesn't optimize test_merge case
20-
2119define void @test_merge (ptr addrspace (2 ) %src ) {
2220; CHECK-LABEL: define void @test_merge(
2321; CHECK-SAME: ptr addrspace(2) [[SRC:%.*]]) {
24- ; CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr addrspace(2) [[SRC]], align 4
25- ; CHECK-NEXT: [[TMP2:%.*]] = ptrtoint ptr addrspace(2) [[SRC]] to i64
26- ; CHECK-NEXT: [[TMP3:%.*]] = add i64 [[TMP2]], 4
27- ; CHECK-NEXT: [[CHUNKPTR:%.*]] = inttoptr i64 [[TMP3]] to ptr addrspace(2)
28- ; CHECK-NEXT: [[TMP4:%.*]] = load <1 x i32>, ptr addrspace(2) [[CHUNKPTR]], align 4
29- ; CHECK-NEXT: [[TMP5:%.*]] = extractelement <1 x i32> [[TMP4]], i32 0
30- ; CHECK-NEXT: call void @use.i32(i32 [[TMP1]])
31- ; CHECK-NEXT: call void @use.i32(i32 [[TMP5]])
22+ ; CHECK-NEXT: [[TMP1:%.*]] = ptrtoint ptr addrspace(2) [[SRC]] to i64
23+ ; CHECK-NEXT: [[CHUNKPTR:%.*]] = inttoptr i64 [[TMP1]] to ptr addrspace(2)
24+ ; CHECK-NEXT: [[TMP2:%.*]] = load <2 x i32>, ptr addrspace(2) [[CHUNKPTR]], align 4
25+ ; CHECK-NEXT: [[TMP3:%.*]] = extractelement <2 x i32> [[TMP2]], i32 0
26+ ; CHECK-NEXT: [[TMP4:%.*]] = extractelement <2 x i32> [[TMP2]], i32 1
27+ ; CHECK-NEXT: call void @use.i32(i32 [[TMP3]])
28+ ; CHECK-NEXT: call void @use.i32(i32 [[TMP4]])
3229; CHECK-NEXT: ret void
3330;
3431 %1 = getelementptr i32 , ptr addrspace (2 ) %src , i32 1
@@ -42,13 +39,13 @@ define void @test_merge(ptr addrspace(2) %src) {
4239define void @test_vectorize (ptr addrspace (2 ) %src ) {
4340; CHECK-LABEL: define void @test_vectorize(
4441; CHECK-SAME: ptr addrspace(2) [[SRC:%.*]]) {
45- ; CHECK-NEXT: [[TMP1:%.*]] = load i32, ptr addrspace(2) [[SRC]], align 4
42+ ; CHECK-NEXT: [[TMP1:%.*]] = getelementptr i32, ptr addrspace(2) [[SRC]], i32 2
4643; CHECK-NEXT: [[TMP2:%.*]] = ptrtoint ptr addrspace(2) [[SRC]] to i64
47- ; CHECK-NEXT: [[TMP3 :%.*]] = add i64 [[TMP2]], 8
48- ; CHECK-NEXT: [[CHUNKPTR :%.*]] = inttoptr i64 [[TMP3]] to ptr addrspace(2)
49- ; CHECK-NEXT: [[TMP4:%.*]] = load <1 x i32>, ptr addrspace(2) [[CHUNKPTR ]], align 4
50- ; CHECK-NEXT: [[TMP5:%.*]] = extractelement <1 x i32> [[TMP4 ]], i32 0
51- ; CHECK-NEXT: call void @use.i32(i32 [[TMP1 ]])
44+ ; CHECK-NEXT: [[CHUNKPTR :%.*]] = inttoptr i64 [[TMP2]] to ptr addrspace(2)
45+ ; CHECK-NEXT: [[TMP3 :%.*]] = load <1 x i32>, ptr addrspace(2) [[CHUNKPTR]], align 4
46+ ; CHECK-NEXT: [[TMP4:%.*]] = extractelement <1 x i32> [[TMP3 ]], i32 0
47+ ; CHECK-NEXT: [[TMP5:%.*]] = load i32, ptr addrspace(2) [[TMP1 ]], align 4
48+ ; CHECK-NEXT: call void @use.i32(i32 [[TMP4 ]])
5249; CHECK-NEXT: call void @use.i32(i32 [[TMP5]])
5350; CHECK-NEXT: ret void
5451;
@@ -64,14 +61,13 @@ define void @test_nonconst_gep(ptr addrspace(2) %src, i32 %off) {
6461; CHECK-LABEL: define void @test_nonconst_gep(
6562; CHECK-SAME: ptr addrspace(2) [[SRC:%.*]], i32 [[OFF:%.*]]) {
6663; CHECK-NEXT: [[TMP1:%.*]] = getelementptr i32, ptr addrspace(2) [[SRC]], i32 [[OFF]]
67- ; CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr addrspace(2) [[TMP1]], align 4
68- ; CHECK-NEXT: [[TMP3:%.*]] = ptrtoint ptr addrspace(2) [[TMP1]] to i64
69- ; CHECK-NEXT: [[TMP4:%.*]] = add i64 [[TMP3]], 4
70- ; CHECK-NEXT: [[CHUNKPTR:%.*]] = inttoptr i64 [[TMP4]] to ptr addrspace(2)
71- ; CHECK-NEXT: [[TMP5:%.*]] = load <1 x i32>, ptr addrspace(2) [[CHUNKPTR]], align 4
72- ; CHECK-NEXT: [[TMP6:%.*]] = extractelement <1 x i32> [[TMP5]], i32 0
73- ; CHECK-NEXT: call void @use.i32(i32 [[TMP2]])
74- ; CHECK-NEXT: call void @use.i32(i32 [[TMP6]])
64+ ; CHECK-NEXT: [[TMP2:%.*]] = ptrtoint ptr addrspace(2) [[TMP1]] to i64
65+ ; CHECK-NEXT: [[CHUNKPTR:%.*]] = inttoptr i64 [[TMP2]] to ptr addrspace(2)
66+ ; CHECK-NEXT: [[TMP3:%.*]] = load <2 x i32>, ptr addrspace(2) [[CHUNKPTR]], align 4
67+ ; CHECK-NEXT: [[TMP4:%.*]] = extractelement <2 x i32> [[TMP3]], i32 0
68+ ; CHECK-NEXT: [[TMP5:%.*]] = extractelement <2 x i32> [[TMP3]], i32 1
69+ ; CHECK-NEXT: call void @use.i32(i32 [[TMP4]])
70+ ; CHECK-NEXT: call void @use.i32(i32 [[TMP5]])
7571; CHECK-NEXT: ret void
7672;
7773 %1 = getelementptr i32 , ptr addrspace (2 ) %src , i32 %off
0 commit comments