Home | History | Annotate | Download | only in InstSimplify
      1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
      2 ; RUN: opt < %s -instsimplify -S | FileCheck %s
      3 
      4 define float @fadd_undef_op0(float %x) {
      5 ; CHECK-LABEL: @fadd_undef_op0(
      6 ; CHECK-NEXT:    ret float 0x7FF8000000000000
      7 ;
      8   %r = fadd float undef, %x
      9   ret float %r
     10 }
     11 
     12 define float @fadd_undef_op1(float %x) {
     13 ; CHECK-LABEL: @fadd_undef_op1(
     14 ; CHECK-NEXT:    ret float 0x7FF8000000000000
     15 ;
     16   %r = fadd float %x, undef
     17   ret float %r
     18 }
     19 
     20 define float @fsub_undef_op0(float %x) {
     21 ; CHECK-LABEL: @fsub_undef_op0(
     22 ; CHECK-NEXT:    ret float 0x7FF8000000000000
     23 ;
     24   %r = fsub float undef, %x
     25   ret float %r
     26 }
     27 
     28 define float @fsub_undef_op1(float %x) {
     29 ; CHECK-LABEL: @fsub_undef_op1(
     30 ; CHECK-NEXT:    ret float 0x7FF8000000000000
     31 ;
     32   %r = fsub float %x, undef
     33   ret float %r
     34 }
     35 
     36 define float @fmul_undef_op0(float %x) {
     37 ; CHECK-LABEL: @fmul_undef_op0(
     38 ; CHECK-NEXT:    ret float 0x7FF8000000000000
     39 ;
     40   %r = fmul float undef, %x
     41   ret float %r
     42 }
     43 
     44 define float @fmul_undef_op1(float %x) {
     45 ; CHECK-LABEL: @fmul_undef_op1(
     46 ; CHECK-NEXT:    ret float 0x7FF8000000000000
     47 ;
     48   %r = fmul float %x, undef
     49   ret float %r
     50 }
     51 
     52 define float @fdiv_undef_op0(float %x) {
     53 ; CHECK-LABEL: @fdiv_undef_op0(
     54 ; CHECK-NEXT:    ret float 0x7FF8000000000000
     55 ;
     56   %r = fdiv float undef, %x
     57   ret float %r
     58 }
     59 
     60 define float @fdiv_undef_op1(float %x) {
     61 ; CHECK-LABEL: @fdiv_undef_op1(
     62 ; CHECK-NEXT:    ret float 0x7FF8000000000000
     63 ;
     64   %r = fdiv float %x, undef
     65   ret float %r
     66 }
     67 
     68 define float @frem_undef_op0(float %x) {
     69 ; CHECK-LABEL: @frem_undef_op0(
     70 ; CHECK-NEXT:    ret float 0x7FF8000000000000
     71 ;
     72   %r = frem float undef, %x
     73   ret float %r
     74 }
     75 
     76 define float @frem_undef_op1(float %x) {
     77 ; CHECK-LABEL: @frem_undef_op1(
     78 ; CHECK-NEXT:    ret float 0x7FF8000000000000
     79 ;
     80   %r = frem float %x, undef
     81   ret float %r
     82 }
     83 
     84 ; Repeat all tests with fast-math-flags. Alternate 'nnan' and 'fast' for more coverage.
     85 
     86 define float @fadd_undef_op0_nnan(float %x) {
     87 ; CHECK-LABEL: @fadd_undef_op0_nnan(
     88 ; CHECK-NEXT:    ret float 0x7FF8000000000000
     89 ;
     90   %r = fadd nnan float undef, %x
     91   ret float %r
     92 }
     93 
     94 define float @fadd_undef_op1_fast(float %x) {
     95 ; CHECK-LABEL: @fadd_undef_op1_fast(
     96 ; CHECK-NEXT:    ret float 0x7FF8000000000000
     97 ;
     98   %r = fadd fast float %x, undef
     99   ret float %r
    100 }
    101 
    102 define float @fsub_undef_op0_fast(float %x) {
    103 ; CHECK-LABEL: @fsub_undef_op0_fast(
    104 ; CHECK-NEXT:    ret float 0x7FF8000000000000
    105 ;
    106   %r = fsub fast float undef, %x
    107   ret float %r
    108 }
    109 
    110 define float @fsub_undef_op1_nnan(float %x) {
    111 ; CHECK-LABEL: @fsub_undef_op1_nnan(
    112 ; CHECK-NEXT:    ret float 0x7FF8000000000000
    113 ;
    114   %r = fsub nnan float %x, undef
    115   ret float %r
    116 }
    117 
    118 define float @fmul_undef_op0_nnan(float %x) {
    119 ; CHECK-LABEL: @fmul_undef_op0_nnan(
    120 ; CHECK-NEXT:    ret float 0x7FF8000000000000
    121 ;
    122   %r = fmul nnan float undef, %x
    123   ret float %r
    124 }
    125 
    126 define float @fmul_undef_op1_fast(float %x) {
    127 ; CHECK-LABEL: @fmul_undef_op1_fast(
    128 ; CHECK-NEXT:    ret float 0x7FF8000000000000
    129 ;
    130   %r = fmul fast float %x, undef
    131   ret float %r
    132 }
    133 
    134 define float @fdiv_undef_op0_fast(float %x) {
    135 ; CHECK-LABEL: @fdiv_undef_op0_fast(
    136 ; CHECK-NEXT:    ret float 0x7FF8000000000000
    137 ;
    138   %r = fdiv fast float undef, %x
    139   ret float %r
    140 }
    141 
    142 define float @fdiv_undef_op1_nnan(float %x) {
    143 ; CHECK-LABEL: @fdiv_undef_op1_nnan(
    144 ; CHECK-NEXT:    ret float 0x7FF8000000000000
    145 ;
    146   %r = fdiv nnan float %x, undef
    147   ret float %r
    148 }
    149 
    150 define float @frem_undef_op0_nnan(float %x) {
    151 ; CHECK-LABEL: @frem_undef_op0_nnan(
    152 ; CHECK-NEXT:    ret float 0x7FF8000000000000
    153 ;
    154   %r = frem nnan float undef, %x
    155   ret float %r
    156 }
    157 
    158 define float @frem_undef_op1_fast(float %x) {
    159 ; CHECK-LABEL: @frem_undef_op1_fast(
    160 ; CHECK-NEXT:    ret float 0x7FF8000000000000
    161 ;
    162   %r = frem fast float %x, undef
    163   ret float %r
    164 }
    165 
    166 ; Constant folding - undef undef.
    167 
    168 define double @fadd_undef_undef(double %x) {
    169 ; CHECK-LABEL: @fadd_undef_undef(
    170 ; CHECK-NEXT:    ret double undef
    171 ;
    172   %r = fadd double undef, undef
    173   ret double %r
    174 }
    175 
    176 define double @fsub_undef_undef(double %x) {
    177 ; CHECK-LABEL: @fsub_undef_undef(
    178 ; CHECK-NEXT:    ret double undef
    179 ;
    180   %r = fsub double undef, undef
    181   ret double %r
    182 }
    183 
    184 define double @fmul_undef_undef(double %x) {
    185 ; CHECK-LABEL: @fmul_undef_undef(
    186 ; CHECK-NEXT:    ret double undef
    187 ;
    188   %r = fmul double undef, undef
    189   ret double %r
    190 }
    191 
    192 define double @fdiv_undef_undef(double %x) {
    193 ; CHECK-LABEL: @fdiv_undef_undef(
    194 ; CHECK-NEXT:    ret double undef
    195 ;
    196   %r = fdiv double undef, undef
    197   ret double %r
    198 }
    199 
    200 define double @frem_undef_undef(double %x) {
    201 ; CHECK-LABEL: @frem_undef_undef(
    202 ; CHECK-NEXT:    ret double undef
    203 ;
    204   %r = frem double undef, undef
    205   ret double %r
    206 }
    207 
    208 ; Constant folding.
    209 
    210 define float @fadd_undef_op0_nnan_constant(float %x) {
    211 ; CHECK-LABEL: @fadd_undef_op0_nnan_constant(
    212 ; CHECK-NEXT:    ret float 0x7FF8000000000000
    213 ;
    214   %r = fadd nnan float undef, 1.0
    215   ret float %r
    216 }
    217 
    218 define float @fadd_undef_op1_constant(float %x) {
    219 ; CHECK-LABEL: @fadd_undef_op1_constant(
    220 ; CHECK-NEXT:    ret float 0x7FF8000000000000
    221 ;
    222   %r = fadd float 2.0, undef
    223   ret float %r
    224 }
    225 
    226 define float @fsub_undef_op0_fast_constant(float %x) {
    227 ; CHECK-LABEL: @fsub_undef_op0_fast_constant(
    228 ; CHECK-NEXT:    ret float 0x7FF8000000000000
    229 ;
    230   %r = fsub fast float undef, 3.0
    231   ret float %r
    232 }
    233 
    234 define float @fsub_undef_op1_constant(float %x) {
    235 ; CHECK-LABEL: @fsub_undef_op1_constant(
    236 ; CHECK-NEXT:    ret float 0x7FF8000000000000
    237 ;
    238   %r = fsub float 4.0, undef
    239   ret float %r
    240 }
    241 
    242 define float @fmul_undef_op0_nnan_constant(float %x) {
    243 ; CHECK-LABEL: @fmul_undef_op0_nnan_constant(
    244 ; CHECK-NEXT:    ret float 0x7FF8000000000000
    245 ;
    246   %r = fmul nnan float undef, 5.0
    247   ret float %r
    248 }
    249 
    250 define float @fmul_undef_op1_constant(float %x) {
    251 ; CHECK-LABEL: @fmul_undef_op1_constant(
    252 ; CHECK-NEXT:    ret float 0x7FF8000000000000
    253 ;
    254   %r = fmul float 6.0, undef
    255   ret float %r
    256 }
    257 
    258 define float @fdiv_undef_op0_fast_constant(float %x) {
    259 ; CHECK-LABEL: @fdiv_undef_op0_fast_constant(
    260 ; CHECK-NEXT:    ret float 0x7FF8000000000000
    261 ;
    262   %r = fdiv fast float undef, 7.0
    263   ret float %r
    264 }
    265 
    266 define float @fdiv_undef_op1_constant(float %x) {
    267 ; CHECK-LABEL: @fdiv_undef_op1_constant(
    268 ; CHECK-NEXT:    ret float 0x7FF8000000000000
    269 ;
    270   %r = fdiv float 8.0, undef
    271   ret float %r
    272 }
    273 
    274 define float @frem_undef_op0_nnan_constant(float %x) {
    275 ; CHECK-LABEL: @frem_undef_op0_nnan_constant(
    276 ; CHECK-NEXT:    ret float 0x7FF8000000000000
    277 ;
    278   %r = frem nnan float undef, 9.0
    279   ret float %r
    280 }
    281 
    282 define float @frem_undef_op1_constant(float %x) {
    283 ; CHECK-LABEL: @frem_undef_op1_constant(
    284 ; CHECK-NEXT:    ret float 0x7FF8000000000000
    285 ;
    286   %r = frem float 10.0, undef
    287   ret float %r
    288 }
    289 
    290 ; Constant folding - special constants: NaN.
    291 
    292 define double @fadd_undef_op0_constant_nan(double %x) {
    293 ; CHECK-LABEL: @fadd_undef_op0_constant_nan(
    294 ; CHECK-NEXT:    ret double 0x7FF8000000000000
    295 ;
    296   %r = fadd double undef, 0x7FF8000000000000
    297   ret double %r
    298 }
    299 
    300 define double @fadd_undef_op1_fast_constant_nan(double %x) {
    301 ; CHECK-LABEL: @fadd_undef_op1_fast_constant_nan(
    302 ; CHECK-NEXT:    ret double 0x7FF8000000000000
    303 ;
    304   %r = fadd fast double 0xFFF0000000000001, undef
    305   ret double %r
    306 }
    307 
    308 define double @fsub_undef_op0_constant_nan(double %x) {
    309 ; CHECK-LABEL: @fsub_undef_op0_constant_nan(
    310 ; CHECK-NEXT:    ret double 0x7FF8000000000000
    311 ;
    312   %r = fsub double undef, 0xFFF8000000000010
    313   ret double %r
    314 }
    315 
    316 define double @fsub_undef_op1_nnan_constant_nan(double %x) {
    317 ; CHECK-LABEL: @fsub_undef_op1_nnan_constant_nan(
    318 ; CHECK-NEXT:    ret double 0x7FF8000000000000
    319 ;
    320   %r = fsub nnan double 0x7FF0000000000011, undef
    321   ret double %r
    322 }
    323 
    324 define double @fmul_undef_op0_constant_nan(double %x) {
    325 ; CHECK-LABEL: @fmul_undef_op0_constant_nan(
    326 ; CHECK-NEXT:    ret double 0x7FF8000000000000
    327 ;
    328   %r = fmul double undef, 0x7FF8000000000100
    329   ret double %r
    330 }
    331 
    332 define double @fmul_undef_op1_fast_constant_nan(double %x) {
    333 ; CHECK-LABEL: @fmul_undef_op1_fast_constant_nan(
    334 ; CHECK-NEXT:    ret double 0x7FF8000000000000
    335 ;
    336   %r = fmul fast double 0xFFF0000000000101, undef
    337   ret double %r
    338 }
    339 
    340 define double @fdiv_undef_op0_constant_nan(double %x) {
    341 ; CHECK-LABEL: @fdiv_undef_op0_constant_nan(
    342 ; CHECK-NEXT:    ret double 0x7FF8000000000000
    343 ;
    344   %r = fdiv double undef, 0xFFF8000000000110
    345   ret double %r
    346 }
    347 
    348 define double @fdiv_undef_op1_nnan_constant_nan(double %x) {
    349 ; CHECK-LABEL: @fdiv_undef_op1_nnan_constant_nan(
    350 ; CHECK-NEXT:    ret double 0x7FF8000000000000
    351 ;
    352   %r = fdiv nnan double 0x7FF0000000000111, undef
    353   ret double %r
    354 }
    355 
    356 define double @frem_undef_op0_constant_nan(double %x) {
    357 ; CHECK-LABEL: @frem_undef_op0_constant_nan(
    358 ; CHECK-NEXT:    ret double 0x7FF8000000000000
    359 ;
    360   %r = frem double undef, 0x7FF8000000001000
    361   ret double %r
    362 }
    363 
    364 define double @frem_undef_op1_fast_constant_nan(double %x) {
    365 ; CHECK-LABEL: @frem_undef_op1_fast_constant_nan(
    366 ; CHECK-NEXT:    ret double 0x7FF8000000000000
    367 ;
    368   %r = frem fast double 0xFFF0000000001001, undef
    369   ret double %r
    370 }
    371 
    372 ; Constant folding - special constants: Inf.
    373 
    374 define double @fadd_undef_op0_constant_inf(double %x) {
    375 ; CHECK-LABEL: @fadd_undef_op0_constant_inf(
    376 ; CHECK-NEXT:    ret double 0x7FF8000000000000
    377 ;
    378   %r = fadd double undef, 0x7FF0000000000000
    379   ret double %r
    380 }
    381 
    382 define double @fadd_undef_op1_fast_constant_inf(double %x) {
    383 ; CHECK-LABEL: @fadd_undef_op1_fast_constant_inf(
    384 ; CHECK-NEXT:    ret double 0x7FF8000000000000
    385 ;
    386   %r = fadd fast double 0xFFF0000000000000, undef
    387   ret double %r
    388 }
    389 
    390 define double @fsub_undef_op0_constant_inf(double %x) {
    391 ; CHECK-LABEL: @fsub_undef_op0_constant_inf(
    392 ; CHECK-NEXT:    ret double 0x7FF8000000000000
    393 ;
    394   %r = fsub double undef, 0xFFF0000000000000
    395   ret double %r
    396 }
    397 
    398 define double @fsub_undef_op1_ninf_constant_inf(double %x) {
    399 ; CHECK-LABEL: @fsub_undef_op1_ninf_constant_inf(
    400 ; CHECK-NEXT:    ret double 0x7FF8000000000000
    401 ;
    402   %r = fsub ninf double 0x7FF0000000000000, undef
    403   ret double %r
    404 }
    405 
    406 define double @fmul_undef_op0_constant_inf(double %x) {
    407 ; CHECK-LABEL: @fmul_undef_op0_constant_inf(
    408 ; CHECK-NEXT:    ret double 0x7FF8000000000000
    409 ;
    410   %r = fmul double undef, 0x7FF0000000000000
    411   ret double %r
    412 }
    413 
    414 define double @fmul_undef_op1_fast_constant_inf(double %x) {
    415 ; CHECK-LABEL: @fmul_undef_op1_fast_constant_inf(
    416 ; CHECK-NEXT:    ret double 0x7FF8000000000000
    417 ;
    418   %r = fmul fast double 0xFFF0000000000000, undef
    419   ret double %r
    420 }
    421 
    422 define double @fdiv_undef_op0_constant_inf(double %x) {
    423 ; CHECK-LABEL: @fdiv_undef_op0_constant_inf(
    424 ; CHECK-NEXT:    ret double 0x7FF8000000000000
    425 ;
    426   %r = fdiv double undef, 0xFFF0000000000000
    427   ret double %r
    428 }
    429 
    430 define double @fdiv_undef_op1_ninf_constant_inf(double %x) {
    431 ; CHECK-LABEL: @fdiv_undef_op1_ninf_constant_inf(
    432 ; CHECK-NEXT:    ret double 0x7FF8000000000000
    433 ;
    434   %r = fdiv ninf double 0x7FF0000000000000, undef
    435   ret double %r
    436 }
    437 
    438 define double @frem_undef_op0_constant_inf(double %x) {
    439 ; CHECK-LABEL: @frem_undef_op0_constant_inf(
    440 ; CHECK-NEXT:    ret double 0x7FF8000000000000
    441 ;
    442   %r = frem double undef, 0x7FF0000000000000
    443   ret double %r
    444 }
    445 
    446 define double @frem_undef_op1_fast_constant_inf(double %x) {
    447 ; CHECK-LABEL: @frem_undef_op1_fast_constant_inf(
    448 ; CHECK-NEXT:    ret double 0x7FF8000000000000
    449 ;
    450   %r = frem fast double 0xFFF0000000000000, undef
    451   ret double %r
    452 }
    453 
    454