@@ -31,6 +31,51 @@ declare void @f1(i32*, i32) local_unnamed_addr #0
31
31
declare void @f2 (i64* , i64 ) local_unnamed_addr #0
32
32
declare i32 @llvm.nvvm.read.ptx.sreg.tid.x () #1
33
33
34
+ ; Make sure we can clone GEP which uses complex constant expressions as indices.
35
+ ; https://bugs.llvm.org/show_bug.cgi?id=51099
36
+ @g2 = internal addrspace (3 ) global [128 x i8 ] undef , align 1
37
+
38
+ ; CHECK-LABEL: @complex_ce(
39
+ ; CHECK: %0 = load float, float addrspace(3)* bitcast
40
+ ; CHECK-SAME: i8 addrspace(3)* getelementptr (i8,
41
+ ; CHECK-SAME: i8 addrspace(3)* getelementptr inbounds ([128 x i8], [128 x i8] addrspace(3)* @g2, i64 0, i64 0),
42
+ ; CHECK-SAME: i64 sub (
43
+ ; CHECK-SAME i64 ptrtoint (
44
+ ; CHECK-SAME i8 addrspace(3)* getelementptr inbounds ([128 x i8], [128 x i8] addrspace(3)* @g2, i64 0, i64 123) to i64),
45
+ ; CHECK-SAME: i64 ptrtoint (
46
+ ; CHECK-SAME: i8 addrspace(3)* getelementptr inbounds ([128 x i8], [128 x i8] addrspace(3)* @g2, i64 2, i64 0) to i64)))
47
+ ; CHECK-SAME: to float addrspace(3)*)
48
+ ; Function Attrs: norecurse nounwind
49
+ define float @complex_ce (i8* nocapture readnone %a , i8* nocapture readnone %b , i8* nocapture readnone %c ) local_unnamed_addr #0 {
50
+ entry:
51
+ %0 = load float , float * bitcast (
52
+ i8* getelementptr (
53
+ i8 , i8* getelementptr inbounds (
54
+ [128 x i8 ],
55
+ [128 x i8 ]* addrspacecast ([128 x i8 ] addrspace (3 )* @g2 to [128 x i8 ]*),
56
+ i64 0 ,
57
+ i64 0 ),
58
+ i64 sub (
59
+ i64 ptrtoint (
60
+ i8* getelementptr inbounds (
61
+ [128 x i8 ],
62
+ [128 x i8 ]* addrspacecast ([128 x i8 ] addrspace (3 )* @g2 to [128 x i8 ]*),
63
+ i64 0 ,
64
+ i64 123 )
65
+ to i64 ),
66
+ i64 ptrtoint (
67
+ i8* getelementptr inbounds (
68
+ [128 x i8 ],
69
+ [128 x i8 ]* addrspacecast ([128 x i8 ] addrspace (3 )* @g2 to [128 x i8 ]*),
70
+ i64 2 ,
71
+ i64 0 )
72
+ to i64 )))
73
+ to float *), align 4
74
+ ret float %0
75
+ }
76
+
77
+
78
+
34
79
attributes #0 = { convergent nounwind }
35
80
attributes #1 = { nounwind readnone }
36
81
attributes #2 = { nounwind }
0 commit comments