@@ -72,3 +72,39 @@ entry:
72
72
store i32 %b , ptr %gep
73
73
ret void
74
74
}
75
+
76
+ define void @test_zext_nneg (ptr %ptr , i32 %a , i32 %b ) {
77
+ ; CHECK-LABEL: define void @test_zext_nneg(
78
+ ; CHECK-SAME: ptr [[PTR:%.*]], i32 [[A:%.*]], i32 [[B:%.*]]) {
79
+ ; CHECK-NEXT: entry:
80
+ ; CHECK-NEXT: [[ADD:%.*]] = add nsw i32 [[A]], 10
81
+ ; CHECK-NEXT: [[IDX:%.*]] = zext nneg i32 [[ADD]] to i64
82
+ ; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds i32, ptr [[PTR]], i64 [[IDX]]
83
+ ; CHECK-NEXT: store i32 [[B]], ptr [[GEP]], align 4
84
+ ; CHECK-NEXT: ret void
85
+ ;
86
+ entry:
87
+ %add = add nsw i32 %a , 10
88
+ %idx = zext nneg i32 %add to i64
89
+ %gep = getelementptr inbounds i32 , ptr %ptr , i64 %idx
90
+ store i32 %b , ptr %gep
91
+ ret void
92
+ }
93
+
94
+ define void @test_zext_missing_nneg (ptr %ptr , i32 %a , i32 %b ) {
95
+ ; CHECK-LABEL: define void @test_zext_missing_nneg(
96
+ ; CHECK-SAME: ptr [[PTR:%.*]], i32 [[A:%.*]], i32 [[B:%.*]]) {
97
+ ; CHECK-NEXT: entry:
98
+ ; CHECK-NEXT: [[ADD:%.*]] = add nsw i32 [[A]], 10
99
+ ; CHECK-NEXT: [[IDX:%.*]] = zext i32 [[ADD]] to i64
100
+ ; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds i32, ptr [[PTR]], i64 [[IDX]]
101
+ ; CHECK-NEXT: store i32 [[B]], ptr [[GEP]], align 4
102
+ ; CHECK-NEXT: ret void
103
+ ;
104
+ entry:
105
+ %add = add nsw i32 %a , 10
106
+ %idx = zext i32 %add to i64
107
+ %gep = getelementptr inbounds i32 , ptr %ptr , i64 %idx
108
+ store i32 %b , ptr %gep
109
+ ret void
110
+ }
0 commit comments