[AMDGPU] Mark AGPR tuple implicit in the first instr of AGPR spills. (#115285)
[llvm-project.git] / llvm / test / Transforms / InstCombine / div-i1.ll
bloba14ef3588e611f66e6fbd41e7f929eca1b60faac
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt -S -passes=instcombine < %s | FileCheck %s
4 define i1 @sdiv_by_zero_indirect_is_poison(i1 %c, i1 %x, i1 %y) {
5 ; CHECK-LABEL: @sdiv_by_zero_indirect_is_poison(
6 ; CHECK-NEXT:    br i1 [[C:%.*]], label [[TRUE:%.*]], label [[FALSE:%.*]]
7 ; CHECK:       true:
8 ; CHECK-NEXT:    br label [[DONE:%.*]]
9 ; CHECK:       false:
10 ; CHECK-NEXT:    br label [[DONE]]
11 ; CHECK:       done:
12 ; CHECK-NEXT:    ret i1 poison
14   br i1 %c, label %true, label %false
15 true:
16   %y_true = and i1 %y, 0
17   br label %done
18 false:
19   %y_false = and i1 %y, 0
20   br label %done
21 done:
22   %yy = phi i1 [ %y_false, %false ], [ %y_true, %true ]
23   %r = sdiv i1 %x, %yy
24   ret i1 %r
27 define i1 @udiv_by_zero_indirect_is_poison(i1 %c, i1 %x, i1 %y) {
28 ; CHECK-LABEL: @udiv_by_zero_indirect_is_poison(
29 ; CHECK-NEXT:    br i1 [[C:%.*]], label [[TRUE:%.*]], label [[FALSE:%.*]]
30 ; CHECK:       true:
31 ; CHECK-NEXT:    br label [[DONE:%.*]]
32 ; CHECK:       false:
33 ; CHECK-NEXT:    br label [[DONE]]
34 ; CHECK:       done:
35 ; CHECK-NEXT:    ret i1 poison
37   br i1 %c, label %true, label %false
38 true:
39   %y_true = and i1 %y, 0
40   br label %done
41 false:
42   %y_false = and i1 %y, 0
43   br label %done
44 done:
45   %yy = phi i1 [ %y_false, %false ], [ %y_true, %true ]
46   %r = udiv i1 %x, %yy
47   ret i1 %r
50 define i1 @srem_by_zero_indirect_is_poison(i1 %c, i1 %x, i1 %y) {
51 ; CHECK-LABEL: @srem_by_zero_indirect_is_poison(
52 ; CHECK-NEXT:    br i1 [[C:%.*]], label [[TRUE:%.*]], label [[FALSE:%.*]]
53 ; CHECK:       true:
54 ; CHECK-NEXT:    br label [[DONE:%.*]]
55 ; CHECK:       false:
56 ; CHECK-NEXT:    br label [[DONE]]
57 ; CHECK:       done:
58 ; CHECK-NEXT:    ret i1 poison
60   br i1 %c, label %true, label %false
61 true:
62   %y_true = and i1 %y, 0
63   br label %done
64 false:
65   %y_false = and i1 %y, 0
66   br label %done
67 done:
68   %yy = phi i1 [ %y_false, %false ], [ %y_true, %true ]
69   %r = srem i1 %x, %yy
70   ret i1 %r
73 define i1 @urem_by_zero_indirect_is_poison(i1 %c, i1 %x, i1 %y) {
74 ; CHECK-LABEL: @urem_by_zero_indirect_is_poison(
75 ; CHECK-NEXT:    br i1 [[C:%.*]], label [[TRUE:%.*]], label [[FALSE:%.*]]
76 ; CHECK:       true:
77 ; CHECK-NEXT:    br label [[DONE:%.*]]
78 ; CHECK:       false:
79 ; CHECK-NEXT:    br label [[DONE]]
80 ; CHECK:       done:
81 ; CHECK-NEXT:    ret i1 poison
83   br i1 %c, label %true, label %false
84 true:
85   %y_true = and i1 %y, 0
86   br label %done
87 false:
88   %y_false = and i1 %y, 0
89   br label %done
90 done:
91   %yy = phi i1 [ %y_false, %false ], [ %y_true, %true ]
92   %r = urem i1 %x, %yy
93   ret i1 %r
96 define i1 @sdiv_i1_is_op0(i1 %x, i1 %y) {
97 ; CHECK-LABEL: @sdiv_i1_is_op0(
98 ; CHECK-NEXT:    ret i1 [[X:%.*]]
100   %r = sdiv i1 %x, %y
101   ret i1 %r
104 define i1 @udiv_i1_is_op0(i1 %x, i1 %y) {
105 ; CHECK-LABEL: @udiv_i1_is_op0(
106 ; CHECK-NEXT:    ret i1 [[X:%.*]]
108   %r = udiv i1 %x, %y
109   ret i1 %r
112 define i1 @srem_i1_is_zero(i1 %x, i1 %y) {
113 ; CHECK-LABEL: @srem_i1_is_zero(
114 ; CHECK-NEXT:    ret i1 false
116   %r = srem i1 %x, %y
117   ret i1 %r
120 define i1 @urem_i1_is_zero(i1 %x, i1 %y) {
121 ; CHECK-LABEL: @urem_i1_is_zero(
122 ; CHECK-NEXT:    ret i1 false
124   %r = urem i1 %x, %y
125   ret i1 %r
128 declare void @llvm.assume(i1 noundef)
130 define i1 @pt62607() {
131 ; CHECK-LABEL: @pt62607(
132 ; CHECK-NEXT:  entry_1:
133 ; CHECK-NEXT:    br label [[LOOP_5:%.*]]
134 ; CHECK:       loop_5:
135 ; CHECK-NEXT:    br i1 poison, label [[LOOP_5]], label [[LOOP_EXIT_8:%.*]]
136 ; CHECK:       loop_exit_8:
137 ; CHECK-NEXT:    ret i1 false
139 entry_1:
140   %val_i1_38 = trunc i8 109 to i1
141   br label %loop_5
142 loop_5:  ; preds = %loop_5, %entry_1
143   %loop_cnt_i1_26.0 = phi i1 [ false, %entry_1 ], [ %val_i1_55, %loop_5 ]
144   %val_i1_55 = add i1 %loop_cnt_i1_26.0, true
145   call void @llvm.assume(i1 %val_i1_55)
146   %val_i1_67 = udiv i1 %val_i1_38, %loop_cnt_i1_26.0
147   br i1 %val_i1_67, label %loop_5, label %loop_exit_8
148 loop_exit_8:  ; preds = %loop_5
149   ret i1 false