Home | History | Annotate | Download | only in PowerPC
      1 ; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 | FileCheck %s --check-prefix=ELF64
      2 
      3 define void @t1a(float %a) uwtable ssp {
      4 entry:
      5 ; ELF64: t1a
      6   %cmp = fcmp oeq float %a, 0.000000e+00
      7 ; ELF64: addis
      8 ; ELF64: lfs
      9 ; ELF64: fcmpu
     10   br i1 %cmp, label %if.then, label %if.end
     11 
     12 if.then:                                          ; preds = %entry
     13   call void @foo()
     14   br label %if.end
     15 
     16 if.end:                                           ; preds = %if.then, %entry
     17   ret void
     18 }
     19 
     20 declare void @foo()
     21 
     22 define void @t1b(float %a) uwtable ssp {
     23 entry:
     24 ; ELF64: t1b
     25   %cmp = fcmp oeq float %a, -0.000000e+00
     26 ; ELF64: addis
     27 ; ELF64: lfs
     28 ; ELF64: fcmpu
     29   br i1 %cmp, label %if.then, label %if.end
     30 
     31 if.then:                                          ; preds = %entry
     32   call void @foo()
     33   br label %if.end
     34 
     35 if.end:                                           ; preds = %if.then, %entry
     36   ret void
     37 }
     38 
     39 define void @t2a(double %a) uwtable ssp {
     40 entry:
     41 ; ELF64: t2a
     42   %cmp = fcmp oeq double %a, 0.000000e+00
     43 ; ELF64: addis
     44 ; ELF64: lfd
     45 ; ELF64: fcmpu
     46   br i1 %cmp, label %if.then, label %if.end
     47 
     48 if.then:                                          ; preds = %entry
     49   call void @foo()
     50   br label %if.end
     51 
     52 if.end:                                           ; preds = %if.then, %entry
     53   ret void
     54 }
     55 
     56 define void @t2b(double %a) uwtable ssp {
     57 entry:
     58 ; ELF64: t2b
     59   %cmp = fcmp oeq double %a, -0.000000e+00
     60 ; ELF64: addis
     61 ; ELF64: lfd
     62 ; ELF64: fcmpu
     63   br i1 %cmp, label %if.then, label %if.end
     64 
     65 if.then:                                          ; preds = %entry
     66   call void @foo()
     67   br label %if.end
     68 
     69 if.end:                                           ; preds = %if.then, %entry
     70   ret void
     71 }
     72 
     73 define void @t4(i8 signext %a) uwtable ssp {
     74 entry:
     75 ; ELF64: t4
     76   %cmp = icmp eq i8 %a, -1
     77 ; ELF64: extsb
     78 ; ELF64: cmpwi
     79   br i1 %cmp, label %if.then, label %if.end
     80 
     81 if.then:                                          ; preds = %entry
     82   call void @foo()
     83   br label %if.end
     84 
     85 if.end:                                           ; preds = %if.then, %entry
     86   ret void
     87 }
     88 
     89 define void @t5(i8 zeroext %a) uwtable ssp {
     90 entry:
     91 ; ELF64: t5
     92   %cmp = icmp eq i8 %a, 1
     93 ; ELF64: extsb
     94 ; ELF64: cmpwi
     95   br i1 %cmp, label %if.then, label %if.end
     96 
     97 if.then:                                          ; preds = %entry
     98   call void @foo()
     99   br label %if.end
    100 
    101 if.end:                                           ; preds = %if.then, %entry
    102   ret void
    103 }
    104 
    105 define void @t6(i16 signext %a) uwtable ssp {
    106 entry:
    107 ; ELF64: t6
    108   %cmp = icmp eq i16 %a, -1
    109 ; ELF64: extsh
    110 ; ELF64: cmpwi
    111   br i1 %cmp, label %if.then, label %if.end
    112 
    113 if.then:                                          ; preds = %entry
    114   call void @foo()
    115   br label %if.end
    116 
    117 if.end:                                           ; preds = %if.then, %entry
    118   ret void
    119 }
    120 
    121 define void @t7(i16 zeroext %a) uwtable ssp {
    122 entry:
    123 ; ELF64: t7
    124   %cmp = icmp eq i16 %a, 1
    125 ; ELF64: extsh
    126 ; ELF64: cmpwi
    127   br i1 %cmp, label %if.then, label %if.end
    128 
    129 if.then:                                          ; preds = %entry
    130   call void @foo()
    131   br label %if.end
    132 
    133 if.end:                                           ; preds = %if.then, %entry
    134   ret void
    135 }
    136 
    137 define void @t8(i32 %a) uwtable ssp {
    138 entry:
    139 ; ELF64: t8
    140   %cmp = icmp eq i32 %a, -1
    141 ; ELF64: cmpwi
    142   br i1 %cmp, label %if.then, label %if.end
    143 
    144 if.then:                                          ; preds = %entry
    145   call void @foo()
    146   br label %if.end
    147 
    148 if.end:                                           ; preds = %if.then, %entry
    149   ret void
    150 }
    151 
    152 define void @t9(i32 %a) uwtable ssp {
    153 entry:
    154 ; ELF64: t9
    155   %cmp = icmp eq i32 %a, 1
    156 ; ELF64: cmpwi
    157   br i1 %cmp, label %if.then, label %if.end
    158 
    159 if.then:                                          ; preds = %entry
    160   call void @foo()
    161   br label %if.end
    162 
    163 if.end:                                           ; preds = %if.then, %entry
    164   ret void
    165 }
    166 
    167 define void @t10(i32 %a) uwtable ssp {
    168 entry:
    169 ; ELF64: t10
    170   %cmp = icmp eq i32 %a, 384
    171 ; ELF64: cmpwi
    172   br i1 %cmp, label %if.then, label %if.end
    173 
    174 if.then:                                          ; preds = %entry
    175   call void @foo()
    176   br label %if.end
    177 
    178 if.end:                                           ; preds = %if.then, %entry
    179   ret void
    180 }
    181 
    182 define void @t11(i32 %a) uwtable ssp {
    183 entry:
    184 ; ELF64: t11
    185   %cmp = icmp eq i32 %a, 4096
    186 ; ELF64: cmpwi
    187   br i1 %cmp, label %if.then, label %if.end
    188 
    189 if.then:                                          ; preds = %entry
    190   call void @foo()
    191   br label %if.end
    192 
    193 if.end:                                           ; preds = %if.then, %entry
    194   ret void
    195 }
    196 
    197 define void @t12(i8 %a) uwtable ssp {
    198 entry:
    199 ; ELF64: t12
    200   %cmp = icmp ugt i8 %a, -113
    201 ; ELF64: rlwinm
    202 ; ELF64: cmplwi
    203   br i1 %cmp, label %if.then, label %if.end
    204 
    205 if.then:                                          ; preds = %entry
    206   call void @foo()
    207   br label %if.end
    208 
    209 if.end:                                           ; preds = %if.then, %entry
    210   ret void
    211 }
    212 
    213 define void @t13() nounwind ssp {
    214 entry:
    215 ; ELF64: t13
    216   %cmp = icmp slt i32 -123, -2147483648
    217 ; ELF64: li
    218 ; ELF64: lis
    219 ; ELF64: cmpw
    220   br i1 %cmp, label %if.then, label %if.end
    221 
    222 if.then:                                          ; preds = %entry
    223   ret void
    224 
    225 if.end:                                           ; preds = %entry
    226   ret void
    227 }
    228 
    229 define void @t14(i64 %a) uwtable ssp {
    230 entry:
    231 ; ELF64: t14
    232   %cmp = icmp eq i64 %a, -1
    233 ; ELF64: cmpdi
    234   br i1 %cmp, label %if.then, label %if.end
    235 
    236 if.then:                                          ; preds = %entry
    237   call void @foo()
    238   br label %if.end
    239 
    240 if.end:                                           ; preds = %if.then, %entry
    241   ret void
    242 }
    243 
    244 define void @t15(i64 %a) uwtable ssp {
    245 entry:
    246 ; ELF64: t15
    247   %cmp = icmp eq i64 %a, 1
    248 ; ELF64: cmpdi
    249   br i1 %cmp, label %if.then, label %if.end
    250 
    251 if.then:                                          ; preds = %entry
    252   call void @foo()
    253   br label %if.end
    254 
    255 if.end:                                           ; preds = %if.then, %entry
    256   ret void
    257 }
    258 
    259 define void @t16(i64 %a) uwtable ssp {
    260 entry:
    261 ; ELF64: t16
    262   %cmp = icmp eq i64 %a, 384
    263 ; ELF64: cmpdi
    264   br i1 %cmp, label %if.then, label %if.end
    265 
    266 if.then:                                          ; preds = %entry
    267   call void @foo()
    268   br label %if.end
    269 
    270 if.end:                                           ; preds = %if.then, %entry
    271   ret void
    272 }
    273 
    274 define void @t17(i64 %a) uwtable ssp {
    275 entry:
    276 ; ELF64: t17
    277   %cmp = icmp eq i64 %a, 32768
    278 ; Extra operand so we don't match on cmpdi.
    279 ; ELF64: cmpd {{[0-9]+}}
    280   br i1 %cmp, label %if.then, label %if.end
    281 
    282 if.then:                                          ; preds = %entry
    283   call void @foo()
    284   br label %if.end
    285 
    286 if.end:                                           ; preds = %if.then, %entry
    287   ret void
    288 }
    289 
    290