@@ -2183,7 +2183,7 @@ define i5 @demand_low_bits_uses(i8 %x, i8 %y) {
2183
2183
; CHECK-NEXT: [[M:%.*]] = mul i8 [[X:%.*]], -32
2184
2184
; CHECK-NEXT: [[A:%.*]] = add i8 [[M]], [[Y:%.*]]
2185
2185
; CHECK-NEXT: call void @use(i8 [[A]])
2186
- ; CHECK-NEXT: [[R:%.*]] = trunc i8 [[A ]] to i5
2186
+ ; CHECK-NEXT: [[R:%.*]] = trunc i8 [[Y ]] to i5
2187
2187
; CHECK-NEXT: ret i5 [[R]]
2188
2188
;
2189
2189
%m = mul i8 %x , -32 ; 0xE0
@@ -2193,6 +2193,8 @@ define i5 @demand_low_bits_uses(i8 %x, i8 %y) {
2193
2193
ret i5 %r
2194
2194
}
2195
2195
2196
+ ; negative test - demands one more bit
2197
+
2196
2198
define i6 @demand_low_bits_uses_extra_bit (i8 %x , i8 %y ) {
2197
2199
; CHECK-LABEL: @demand_low_bits_uses_extra_bit(
2198
2200
; CHECK-NEXT: [[M:%.*]] = mul i8 [[X:%.*]], -32
@@ -2214,7 +2216,7 @@ define i8 @demand_low_bits_uses_commute(i8 %x, i8 %p, i8 %z) {
2214
2216
; CHECK-NEXT: [[M:%.*]] = and i8 [[X:%.*]], -64
2215
2217
; CHECK-NEXT: [[A:%.*]] = add i8 [[Y]], [[M]]
2216
2218
; CHECK-NEXT: call void @use(i8 [[A]])
2217
- ; CHECK-NEXT: [[S:%.*]] = sub i8 [[A ]], [[Z:%.*]]
2219
+ ; CHECK-NEXT: [[S:%.*]] = sub i8 [[Y ]], [[Z:%.*]]
2218
2220
; CHECK-NEXT: [[R:%.*]] = shl i8 [[S]], 2
2219
2221
; CHECK-NEXT: ret i8 [[R]]
2220
2222
;
@@ -2227,8 +2229,10 @@ define i8 @demand_low_bits_uses_commute(i8 %x, i8 %p, i8 %z) {
2227
2229
ret i8 %r
2228
2230
}
2229
2231
2230
- define i8 @demand_low_bits_uses_commutei_extra_bit (i8 %x , i8 %p , i8 %z ) {
2231
- ; CHECK-LABEL: @demand_low_bits_uses_commutei_extra_bit(
2232
+ ; negative test - demands one more bit
2233
+
2234
+ define i8 @demand_low_bits_uses_commute_extra_bit (i8 %x , i8 %p , i8 %z ) {
2235
+ ; CHECK-LABEL: @demand_low_bits_uses_commute_extra_bit(
2232
2236
; CHECK-NEXT: [[Y:%.*]] = mul i8 [[P:%.*]], [[P]]
2233
2237
; CHECK-NEXT: [[M:%.*]] = and i8 [[X:%.*]], -64
2234
2238
; CHECK-NEXT: [[A:%.*]] = add i8 [[Y]], [[M]]
@@ -2257,7 +2261,7 @@ define { i64, i64 } @PR57576(i64 noundef %x, i64 noundef %y, i64 noundef %z, i64
2257
2261
; CHECK-NEXT: [[XY:%.*]] = or i128 [[SHY]], [[ZX]]
2258
2262
; CHECK-NEXT: [[SUB:%.*]] = sub i128 [[XY]], [[ZZ]]
2259
2263
; CHECK-NEXT: [[ADD:%.*]] = add i128 [[SUB]], [[MW]]
2260
- ; CHECK-NEXT: [[T:%.*]] = trunc i128 [[ADD ]] to i64
2264
+ ; CHECK-NEXT: [[T:%.*]] = trunc i128 [[SUB ]] to i64
2261
2265
; CHECK-NEXT: [[H:%.*]] = lshr i128 [[ADD]], 64
2262
2266
; CHECK-NEXT: [[T2:%.*]] = trunc i128 [[H]] to i64
2263
2267
; CHECK-NEXT: [[R1:%.*]] = insertvalue { i64, i64 } poison, i64 [[T]], 0
0 commit comments