Home | History | Annotate | Download | only in InstSimplify
      1 ; RUN: opt -instsimplify -S < %s | FileCheck %s
      2 
      3 ; @test0
      4 ; CHECK: ret i64 undef
      5 define i64 @test0() {
      6   %r = mul i64 undef, undef
      7   ret i64 %r
      8 }
      9 
     10 ; @test1
     11 ; CHECK: ret i64 undef
     12 define i64 @test1() {
     13   %r = mul i64 3, undef
     14   ret i64 %r
     15 }
     16 
     17 ; @test2
     18 ; CHECK: ret i64 undef
     19 define i64 @test2() {
     20   %r = mul i64 undef, 3
     21   ret i64 %r
     22 }
     23 
     24 ; @test3
     25 ; CHECK: ret i64 0
     26 define i64 @test3() {
     27   %r = mul i64 undef, 6
     28   ret i64 %r
     29 }
     30 
     31 ; @test4
     32 ; CHECK: ret i64 0
     33 define i64 @test4() {
     34   %r = mul i64 6, undef
     35   ret i64 %r
     36 }
     37 
     38 ; @test5
     39 ; CHECK: ret i64 undef
     40 define i64 @test5() {
     41   %r = and i64 undef, undef
     42   ret i64 %r
     43 }
     44 
     45 ; @test6
     46 ; CHECK: ret i64 undef
     47 define i64 @test6() {
     48   %r = or i64 undef, undef
     49   ret i64 %r
     50 }
     51 
     52 ; @test7
     53 ; CHECK: ret i64 undef
     54 define i64 @test7() {
     55   %r = udiv i64 undef, 1
     56   ret i64 %r
     57 }
     58 
     59 ; @test8
     60 ; CHECK: ret i64 undef
     61 define i64 @test8() {
     62   %r = sdiv i64 undef, 1
     63   ret i64 %r
     64 }
     65 
     66 ; @test9
     67 ; CHECK: ret i64 0
     68 define i64 @test9() {
     69   %r = urem i64 undef, 1
     70   ret i64 %r
     71 }
     72 
     73 ; @test10
     74 ; CHECK: ret i64 0
     75 define i64 @test10() {
     76   %r = srem i64 undef, 1
     77   ret i64 %r
     78 }
     79 
     80 ; @test11
     81 ; CHECK: ret i64 undef
     82 define i64 @test11() {
     83   %r = shl i64 undef, undef
     84   ret i64 %r
     85 }
     86 
     87 ; @test11b
     88 ; CHECK: ret i64 undef
     89 define i64 @test11b(i64 %a) {
     90   %r = shl i64 %a, undef
     91   ret i64 %r
     92 }
     93 
     94 ; @test12
     95 ; CHECK: ret i64 undef
     96 define i64 @test12() {
     97   %r = ashr i64 undef, undef
     98   ret i64 %r
     99 }
    100 
    101 ; @test12b
    102 ; CHECK: ret i64 undef
    103 define i64 @test12b(i64 %a) {
    104   %r = ashr i64 %a, undef
    105   ret i64 %r
    106 }
    107 
    108 ; @test13
    109 ; CHECK: ret i64 undef
    110 define i64 @test13() {
    111   %r = lshr i64 undef, undef
    112   ret i64 %r
    113 }
    114 
    115 ; @test13b
    116 ; CHECK: ret i64 undef
    117 define i64 @test13b(i64 %a) {
    118   %r = lshr i64 %a, undef
    119   ret i64 %r
    120 }
    121 
    122 ; @test14
    123 ; CHECK: ret i1 undef
    124 define i1 @test14() {
    125   %r = icmp slt i64 undef, undef
    126   ret i1 %r
    127 }
    128 
    129 ; @test15
    130 ; CHECK: ret i1 undef
    131 define i1 @test15() {
    132   %r = icmp ult i64 undef, undef
    133   ret i1 %r
    134 }
    135 
    136 ; @test16
    137 ; CHECK: ret i64 undef
    138 define i64 @test16(i64 %a) {
    139   %r = select i1 undef, i64 %a, i64 undef
    140   ret i64 %r
    141 }
    142 
    143 ; @test17
    144 ; CHECK: ret i64 undef
    145 define i64 @test17(i64 %a) {
    146   %r = select i1 undef, i64 undef, i64 %a
    147   ret i64 %r
    148 }
    149 
    150 ; @test18
    151 ; CHECK: ret i64 undef
    152 define i64 @test18(i64 %a) {
    153   %r = call i64 (i64) undef(i64 %a)
    154   ret i64 %r
    155 }
    156 
    157 ; CHECK-LABEL: @test19
    158 ; CHECK: ret <4 x i8> undef
    159 define <4 x i8> @test19(<4 x i8> %a) {
    160   %b = shl <4 x i8> %a, <i8 8, i8 9, i8 undef, i8 -1>
    161   ret <4 x i8> %b
    162 }
    163 
    164 ; CHECK-LABEL: @test20
    165 ; CHECK: ret i32 undef
    166 define i32 @test20(i32 %a) {
    167   %b = udiv i32 %a, 0
    168   ret i32 %b
    169 }
    170 
    171 ; CHECK-LABEL: @test21
    172 ; CHECK: ret i32 undef
    173 define i32 @test21(i32 %a) {
    174   %b = sdiv i32 %a, 0
    175   ret i32 %b
    176 }
    177 
    178 ; CHECK-LABEL: @test22
    179 ; CHECK: ret i32 undef
    180 define i32 @test22(i32 %a) {
    181   %b = ashr exact i32 undef, %a
    182   ret i32 %b
    183 }
    184 
    185 ; CHECK-LABEL: @test23
    186 ; CHECK: ret i32 undef
    187 define i32 @test23(i32 %a) {
    188   %b = lshr exact i32 undef, %a
    189   ret i32 %b
    190 }
    191 
    192 ; CHECK-LABEL: @test24
    193 ; CHECK: ret i32 undef
    194 define i32 @test24() {
    195   %b = udiv i32 undef, 0
    196   ret i32 %b
    197 }
    198 
    199 ; CHECK-LABEL: @test25
    200 ; CHECK: ret i32 undef
    201 define i32 @test25() {
    202   %b = lshr i32 0, undef
    203   ret i32 %b
    204 }
    205 
    206 ; CHECK-LABEL: @test26
    207 ; CHECK: ret i32 undef
    208 define i32 @test26() {
    209   %b = ashr i32 0, undef
    210   ret i32 %b
    211 }
    212 
    213 ; CHECK-LABEL: @test27
    214 ; CHECK: ret i32 undef
    215 define i32 @test27() {
    216   %b = shl i32 0, undef
    217   ret i32 %b
    218 }
    219 
    220 ; CHECK-LABEL: @test28
    221 ; CHECK: ret i32 undef
    222 define i32 @test28(i32 %a) {
    223   %b = shl nsw i32 undef, %a
    224   ret i32 %b
    225 }
    226 
    227 ; CHECK-LABEL: @test29
    228 ; CHECK: ret i32 undef
    229 define i32 @test29(i32 %a) {
    230   %b = shl nuw i32 undef, %a
    231   ret i32 %b
    232 }
    233 
    234 ; CHECK-LABEL: @test30
    235 ; CHECK: ret i32 undef
    236 define i32 @test30(i32 %a) {
    237   %b = shl nsw nuw i32 undef, %a
    238   ret i32 %b
    239 }
    240 
    241 ; CHECK-LABEL: @test31
    242 ; CHECK: ret i32 0
    243 define i32 @test31(i32 %a) {
    244   %b = shl i32 undef, %a
    245   ret i32 %b
    246 }
    247 
    248 ; CHECK-LABEL: @test32
    249 ; CHECK: ret i32 undef
    250 define i32 @test32(i32 %a) {
    251   %b = shl i32 undef, 0
    252   ret i32 %b
    253 }
    254 
    255 ; CHECK-LABEL: @test33
    256 ; CHECK: ret i32 undef
    257 define i32 @test33(i32 %a) {
    258   %b = ashr i32 undef, 0
    259   ret i32 %b
    260 }
    261 
    262 ; CHECK-LABEL: @test34
    263 ; CHECK: ret i32 undef
    264 define i32 @test34(i32 %a) {
    265   %b = lshr i32 undef, 0
    266   ret i32 %b
    267 }
    268 
    269 ; CHECK-LABEL: @test35
    270 ; CHECK: ret i32 undef
    271 define i32 @test35(<4 x i32> %V) {
    272   %b = extractelement <4 x i32> %V, i32 4
    273   ret i32 %b
    274 }
    275 
    276 ; CHECK-LABEL: @test36
    277 ; CHECK: ret i32 undef
    278 define i32 @test36(i32 %V) {
    279   %b = extractelement <4 x i32> undef, i32 %V
    280   ret i32 %b
    281 }
    282