109 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=instcombine -S | FileCheck %s3 4declare void @use.i8(i8)5define i1 @sdiv_exact_eq_0(i8 %x, i8 %y) {6; CHECK-LABEL: @sdiv_exact_eq_0(7; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[X:%.*]], 08; CHECK-NEXT: ret i1 [[R]]9;10 %d = sdiv exact i8 %x, %y11 %r = icmp eq i8 %d, 012 ret i1 %r13}14 15define i1 @udiv_exact_ne_0(i8 %x, i8 %y) {16; CHECK-LABEL: @udiv_exact_ne_0(17; CHECK-NEXT: [[R:%.*]] = icmp ne i8 [[X:%.*]], 018; CHECK-NEXT: ret i1 [[R]]19;20 %d = udiv exact i8 %x, %y21 %r = icmp ne i8 %d, 022 ret i1 %r23}24 25define i1 @sdiv_exact_ne_1(i8 %x, i8 %y) {26; CHECK-LABEL: @sdiv_exact_ne_1(27; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[X:%.*]], 028; CHECK-NEXT: ret i1 [[R]]29;30 %d = sdiv exact i8 %x, %y31 %r = icmp eq i8 %d, 032 ret i1 %r33}34 35define i1 @udiv_exact_eq_1(i8 %x, i8 %y) {36; CHECK-LABEL: @udiv_exact_eq_1(37; CHECK-NEXT: [[R:%.*]] = icmp ne i8 [[X:%.*]], [[Y:%.*]]38; CHECK-NEXT: ret i1 [[R]]39;40 %d = udiv exact i8 %x, %y41 %r = icmp ne i8 %d, 142 ret i1 %r43}44 45define i1 @sdiv_exact_eq_9_no_of(i8 %x, i8 %y) {46; CHECK-LABEL: @sdiv_exact_eq_9_no_of(47; CHECK-NEXT: [[YY:%.*]] = and i8 [[Y:%.*]], 748; CHECK-NEXT: [[TMP1:%.*]] = mul nuw nsw i8 [[YY]], 949; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[TMP1]], [[X:%.*]]50; CHECK-NEXT: ret i1 [[R]]51;52 %yy = and i8 %y, 753 %d = sdiv exact i8 %x, %yy54 %r = icmp eq i8 %d, 955 ret i1 %r56}57 58define i1 @sdiv_exact_eq_9_may_of(i8 %x, i8 %y) {59; CHECK-LABEL: @sdiv_exact_eq_9_may_of(60; CHECK-NEXT: [[D:%.*]] = sdiv exact i8 [[X:%.*]], [[Y:%.*]]61; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[D]], 962; CHECK-NEXT: ret i1 [[R]]63;64 %d = sdiv exact i8 %x, %y65 %r = icmp eq i8 %d, 966 ret i1 %r67}68 69define i1 @sdiv_exact_eq_9_no_of_fail_multiuse(i8 %x, i8 %y) {70; CHECK-LABEL: @sdiv_exact_eq_9_no_of_fail_multiuse(71; CHECK-NEXT: [[YY:%.*]] = and i8 [[Y:%.*]], 772; CHECK-NEXT: [[D:%.*]] = sdiv exact i8 [[X:%.*]], [[YY]]73; CHECK-NEXT: call void @use.i8(i8 [[D]])74; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[D]], 975; CHECK-NEXT: ret i1 [[R]]76;77 %yy = and i8 %y, 778 %d = sdiv exact i8 %x, %yy79 call void @use.i8(i8 %d)80 %r = icmp eq i8 %d, 981 ret i1 %r82}83 84define i1 @sdiv_exact_eq_9_must_of_todo_is_false(i8 %x, i8 %y) {85; CHECK-LABEL: @sdiv_exact_eq_9_must_of_todo_is_false(86; CHECK-NEXT: [[YY:%.*]] = or i8 [[Y:%.*]], 5587; CHECK-NEXT: [[D:%.*]] = sdiv exact i8 [[X:%.*]], [[YY]]88; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[D]], 989; CHECK-NEXT: ret i1 [[R]]90;91 %yy = or i8 %y, 5592 %d = sdiv exact i8 %x, %yy93 %r = icmp eq i8 %d, 994 ret i1 %r95}96 97define i1 @udiv_exact_ne_30_no_of(i8 %x, i8 %y) {98; CHECK-LABEL: @udiv_exact_ne_30_no_of(99; CHECK-NEXT: [[YY:%.*]] = and i8 [[Y:%.*]], 7100; CHECK-NEXT: [[TMP1:%.*]] = mul nuw i8 [[YY]], 30101; CHECK-NEXT: [[R:%.*]] = icmp ne i8 [[TMP1]], [[X:%.*]]102; CHECK-NEXT: ret i1 [[R]]103;104 %yy = and i8 %y, 7105 %d = udiv exact i8 %x, %yy106 %r = icmp ne i8 %d, 30107 ret i1 %r108}109