Home | History | Annotate | Download | only in ARM
      1 ; RUN: llc < %s -O0 -fast-isel-abort=1 -relocation-model=dynamic-no-pic -mtriple=armv7-apple-ios -verify-machineinstrs | FileCheck %s --check-prefix=ARM
      2 ; RUN: llc < %s -O0 -fast-isel-abort=1 -relocation-model=dynamic-no-pic -mtriple=armv7-linux-gnueabi -verify-machineinstrs | FileCheck %s --check-prefix=ARM
      3 ; RUN: llc < %s -O0 -fast-isel-abort=1 -relocation-model=dynamic-no-pic -mtriple=thumbv7-apple-ios -verify-machineinstrs | FileCheck %s --check-prefix=THUMB
      4 
      5 define void @t1a(float %a) uwtable ssp {
      6 entry:
      7 ; ARM: t1a
      8 ; THUMB: t1a
      9   %cmp = fcmp oeq float %a, 0.000000e+00
     10 ; ARM: vcmpe.f32 s{{[0-9]+}}, #0
     11 ; THUMB: vcmpe.f32 s{{[0-9]+}}, #0
     12   br i1 %cmp, label %if.then, label %if.end
     13 
     14 if.then:                                          ; preds = %entry
     15   tail call void @foo()
     16   br label %if.end
     17 
     18 if.end:                                           ; preds = %if.then, %entry
     19   ret void
     20 }
     21 
     22 declare void @foo()
     23 
     24 ; Shouldn't be able to encode -0.0 imm.
     25 define void @t1b(float %a) uwtable ssp {
     26 entry:
     27 ; ARM: t1b
     28 ; THUMB: t1b
     29   %cmp = fcmp oeq float %a, -0.000000e+00
     30 ; ARM: vldr
     31 ; ARM: vcmpe.f32 s{{[0-9]+}}, s{{[0-9]+}}
     32 ; THUMB: vldr
     33 ; THUMB: vcmpe.f32 s{{[0-9]+}}, s{{[0-9]+}}
     34   br i1 %cmp, label %if.then, label %if.end
     35 
     36 if.then:                                          ; preds = %entry
     37   tail call void @foo()
     38   br label %if.end
     39 
     40 if.end:                                           ; preds = %if.then, %entry
     41   ret void
     42 }
     43 
     44 define void @t2a(double %a) uwtable ssp {
     45 entry:
     46 ; ARM: t2a
     47 ; THUMB: t2a
     48   %cmp = fcmp oeq double %a, 0.000000e+00
     49 ; ARM: vcmpe.f64 d{{[0-9]+}}, #0
     50 ; THUMB: vcmpe.f64 d{{[0-9]+}}, #0
     51   br i1 %cmp, label %if.then, label %if.end
     52 
     53 if.then:                                          ; preds = %entry
     54   tail call void @foo()
     55   br label %if.end
     56 
     57 if.end:                                           ; preds = %if.then, %entry
     58   ret void
     59 }
     60 
     61 ; Shouldn't be able to encode -0.0 imm.
     62 define void @t2b(double %a) uwtable ssp {
     63 entry:
     64 ; ARM: t2b
     65 ; THUMB: t2b
     66   %cmp = fcmp oeq double %a, -0.000000e+00
     67 ; ARM: vldr
     68 ; ARM: vcmpe.f64 d{{[0-9]+}}, d{{[0-9]+}}
     69 ; THUMB: vldr
     70 ; THUMB: vcmpe.f64 d{{[0-9]+}}, d{{[0-9]+}}
     71   br i1 %cmp, label %if.then, label %if.end
     72 
     73 if.then:                                          ; preds = %entry
     74   tail call void @foo()
     75   br label %if.end
     76 
     77 if.end:                                           ; preds = %if.then, %entry
     78   ret void
     79 }
     80 
     81 define void @t4(i8 signext %a) uwtable ssp {
     82 entry:
     83 ; ARM: t4
     84 ; THUMB: t4
     85   %cmp = icmp eq i8 %a, -1
     86 ; ARM: cmn r{{[0-9]}}, #1
     87 ; THUMB: cmn.w r{{[0-9]}}, #1
     88   br i1 %cmp, label %if.then, label %if.end
     89 
     90 if.then:                                          ; preds = %entry
     91   tail call void @foo()
     92   br label %if.end
     93 
     94 if.end:                                           ; preds = %if.then, %entry
     95   ret void
     96 }
     97 
     98 define void @t5(i8 zeroext %a) uwtable ssp {
     99 entry:
    100 ; ARM: t5
    101 ; THUMB: t5
    102   %cmp = icmp eq i8 %a, 1
    103 ; ARM: cmp r{{[0-9]}}, #1
    104 ; THUMB: cmp r{{[0-9]}}, #1
    105   br i1 %cmp, label %if.then, label %if.end
    106 
    107 if.then:                                          ; preds = %entry
    108   tail call void @foo()
    109   br label %if.end
    110 
    111 if.end:                                           ; preds = %if.then, %entry
    112   ret void
    113 }
    114 
    115 define void @t6(i16 signext %a) uwtable ssp {
    116 entry:
    117 ; ARM: t6
    118 ; THUMB: t6
    119   %cmp = icmp eq i16 %a, -1
    120 ; ARM: cmn r{{[0-9]}}, #1
    121 ; THUMB: cmn.w r{{[0-9]}}, #1
    122   br i1 %cmp, label %if.then, label %if.end
    123 
    124 if.then:                                          ; preds = %entry
    125   tail call void @foo()
    126   br label %if.end
    127 
    128 if.end:                                           ; preds = %if.then, %entry
    129   ret void
    130 }
    131 
    132 define void @t7(i16 zeroext %a) uwtable ssp {
    133 entry:
    134 ; ARM: t7
    135 ; THUMB: t7
    136   %cmp = icmp eq i16 %a, 1
    137 ; ARM: cmp r{{[0-9]}}, #1
    138 ; THUMB: cmp r{{[0-9]}}, #1
    139   br i1 %cmp, label %if.then, label %if.end
    140 
    141 if.then:                                          ; preds = %entry
    142   tail call void @foo()
    143   br label %if.end
    144 
    145 if.end:                                           ; preds = %if.then, %entry
    146   ret void
    147 }
    148 
    149 define void @t8(i32 %a) uwtable ssp {
    150 entry:
    151 ; ARM: t8
    152 ; THUMB: t8
    153   %cmp = icmp eq i32 %a, -1
    154 ; ARM: cmn r{{[0-9]}}, #1
    155 ; THUMB: cmn.w r{{[0-9]}}, #1
    156   br i1 %cmp, label %if.then, label %if.end
    157 
    158 if.then:                                          ; preds = %entry
    159   tail call void @foo()
    160   br label %if.end
    161 
    162 if.end:                                           ; preds = %if.then, %entry
    163   ret void
    164 }
    165 
    166 define void @t9(i32 %a) uwtable ssp {
    167 entry:
    168 ; ARM: t9
    169 ; THUMB: t9
    170   %cmp = icmp eq i32 %a, 1
    171 ; ARM: cmp r{{[0-9]}}, #1
    172 ; THUMB: cmp r{{[0-9]}}, #1
    173   br i1 %cmp, label %if.then, label %if.end
    174 
    175 if.then:                                          ; preds = %entry
    176   tail call void @foo()
    177   br label %if.end
    178 
    179 if.end:                                           ; preds = %if.then, %entry
    180   ret void
    181 }
    182 
    183 define void @t10(i32 %a) uwtable ssp {
    184 entry:
    185 ; ARM: t10
    186 ; THUMB: t10
    187   %cmp = icmp eq i32 %a, 384
    188 ; ARM: cmp r{{[0-9]}}, #384
    189 ; THUMB: cmp.w r{{[0-9]}}, #384
    190   br i1 %cmp, label %if.then, label %if.end
    191 
    192 if.then:                                          ; preds = %entry
    193   tail call void @foo()
    194   br label %if.end
    195 
    196 if.end:                                           ; preds = %if.then, %entry
    197   ret void
    198 }
    199 
    200 define void @t11(i32 %a) uwtable ssp {
    201 entry:
    202 ; ARM: t11
    203 ; THUMB: t11
    204   %cmp = icmp eq i32 %a, 4096
    205 ; ARM: cmp r{{[0-9]}}, #4096
    206 ; THUMB: cmp.w r{{[0-9]}}, #4096
    207   br i1 %cmp, label %if.then, label %if.end
    208 
    209 if.then:                                          ; preds = %entry
    210   tail call void @foo()
    211   br label %if.end
    212 
    213 if.end:                                           ; preds = %if.then, %entry
    214   ret void
    215 }
    216 
    217 define void @t12(i8 %a) uwtable ssp {
    218 entry:
    219 ; ARM: t12
    220 ; THUMB: t12
    221   %cmp = icmp ugt i8 %a, -113
    222 ; ARM: cmp r{{[0-9]}}, #143
    223 ; THUMB: cmp r{{[0-9]}}, #143
    224   br i1 %cmp, label %if.then, label %if.end
    225 
    226 if.then:                                          ; preds = %entry
    227   tail call void @foo()
    228   br label %if.end
    229 
    230 if.end:                                           ; preds = %if.then, %entry
    231   ret void
    232 }
    233 
    234 ; rdar://11038907
    235 ; When comparing LONG_MIN/INT_MIN use a cmp instruction.
    236 define void @t13() nounwind ssp {
    237 entry:
    238 ; ARM: t13
    239 ; THUMB: t13
    240   %cmp = icmp slt i32 -123, -2147483648
    241 ; ARM: cmp r{{[0-9]}}, #-2147483648
    242 ; THUMB: cmp.w r{{[0-9]}}, #-2147483648
    243   br i1 %cmp, label %if.then, label %if.end
    244 
    245 if.then:                                          ; preds = %entry
    246   ret void
    247 
    248 if.end:                                           ; preds = %entry
    249   ret void
    250 }
    251 
    252