File tree Expand file tree Collapse file tree 3 files changed +42
-0
lines changed
llvm/test/Transforms/InstSimplify Expand file tree Collapse file tree 3 files changed +42
-0
lines changed Original file line number Diff line number Diff line change @@ -231,3 +231,17 @@ define i1 @nonnull17_unknown(i8 %x) {
231231 %q = icmp ne i8 %x , 0
232232 ret i1 %q
233233}
234+
235+ define i1 @nonnull_trunc_true (i8 %x ) {
236+ ; CHECK-LABEL: @nonnull_trunc_true(
237+ ; CHECK-NEXT: [[A:%.*]] = trunc i8 [[X:%.*]] to i1
238+ ; CHECK-NEXT: call void @llvm.assume(i1 [[A]])
239+ ; CHECK-NEXT: [[Q:%.*]] = icmp ne i8 [[X]], 0
240+ ; CHECK-NEXT: ret i1 [[Q]]
241+ ;
242+ %a = trunc i8 %x to i1
243+ call void @llvm.assume (i1 %a )
244+ %q = icmp ne i8 %x , 0
245+ ret i1 %q
246+ }
247+
Original file line number Diff line number Diff line change @@ -3424,6 +3424,21 @@ define i1 @icmp_ult_vscale_false(i8 %x, i8 %y) {
34243424 ret i1 %cmp
34253425}
34263426
3427+ define i1 @icmp_eq_false_by_trunc (i8 %x ) {
3428+ ; CHECK-LABEL: @icmp_eq_false_by_trunc(
3429+ ; CHECK-NEXT: [[TRUNC:%.*]] = trunc i8 [[X:%.*]] to i1
3430+ ; CHECK-NEXT: [[NOT:%.*]] = xor i1 [[TRUNC]], true
3431+ ; CHECK-NEXT: call void @llvm.assume(i1 [[NOT]])
3432+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[X]], 1
3433+ ; CHECK-NEXT: ret i1 [[CMP]]
3434+ ;
3435+ %trunc = trunc i8 %x to i1
3436+ %not = xor i1 %trunc , true
3437+ call void @llvm.assume (i1 %not )
3438+ %cmp = icmp eq i8 %x , 1
3439+ ret i1 %cmp
3440+ }
3441+
34273442declare i64 @llvm.vscale.i64 ()
34283443
34293444; TODO: Add coverage for global aliases, link once, etc..
Original file line number Diff line number Diff line change @@ -381,6 +381,19 @@ define i32 @exact_lshr_lowbit(i32 %shiftval) {
381381 ret i32 %shr
382382}
383383
384+ define i8 @exact_lshr_lowbit_set_assume_trunc (i8 %x ) {
385+ ; CHECK-LABEL: @exact_lshr_lowbit_set_assume_trunc(
386+ ; CHECK-NEXT: [[COND:%.*]] = trunc i8 [[X:%.*]] to i1
387+ ; CHECK-NEXT: call void @llvm.assume(i1 [[COND]])
388+ ; CHECK-NEXT: [[SHR:%.*]] = lshr exact i8 [[X]], 1
389+ ; CHECK-NEXT: ret i8 [[SHR]]
390+ ;
391+ %cond = trunc i8 %x to i1
392+ call void @llvm.assume (i1 %cond )
393+ %shr = lshr exact i8 %x , 1
394+ ret i8 %shr
395+ }
396+
384397define i32 @exact_ashr_lowbit (i32 %shiftval ) {
385398; CHECK-LABEL: @exact_ashr_lowbit(
386399; CHECK-NEXT: ret i32 7
You can’t perform that action at this time.
0 commit comments