Home | History | Annotate | Download | only in PowerPC
      1 ; FIXME: FastISel currently returns false if it hits code that uses VSX
      2 ; registers and with -fast-isel-abort=1 turned on the test case will then fail.
      3 ; When fastisel better supports VSX fix up this test case.
      4 ;
      5 ; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 -mattr=-vsx | FileCheck %s --check-prefix=ELF64
      6 
      7 define zeroext i1 @rettrue() nounwind {
      8 entry:
      9 ; ELF64-LABEL: rettrue
     10 ; ELF64: li 3, 1
     11 ; ELF64: blr
     12   ret i1 true
     13 }
     14 
     15 define zeroext i1 @retfalse() nounwind {
     16 entry:
     17 ; ELF64-LABEL: retfalse
     18 ; ELF64: li 3, 0
     19 ; ELF64: blr
     20   ret i1 false
     21 }
     22 
     23 define signext i1 @retstrue() nounwind {
     24 entry:
     25 ; ELF64-LABEL: retstrue
     26 ; ELF64: li 3, -1
     27 ; ELF64: blr
     28   ret i1 true
     29 }
     30 
     31 define signext i1 @retsfalse() nounwind {
     32 entry:
     33 ; ELF64-LABEL: retsfalse
     34 ; ELF64: li 3, 0
     35 ; ELF64: blr
     36   ret i1 false
     37 }
     38 
     39 define signext i8 @ret2(i8 signext %a) nounwind {
     40 entry:
     41 ; ELF64-LABEL: ret2
     42 ; ELF64: extsb
     43 ; ELF64: blr
     44   ret i8 %a
     45 }
     46 
     47 define zeroext i8 @ret3(i8 signext %a) nounwind {
     48 entry:
     49 ; ELF64-LABEL: ret3
     50 ; ELF64: clrldi {{[0-9]+}}, {{[0-9]+}}, 56
     51 ; ELF64: blr
     52   ret i8 %a
     53 }
     54 
     55 define signext i16 @ret4(i16 signext %a) nounwind {
     56 entry:
     57 ; ELF64-LABEL: ret4
     58 ; ELF64: extsh
     59 ; ELF64: blr
     60   ret i16 %a
     61 }
     62 
     63 define zeroext i16 @ret5(i16 signext %a) nounwind {
     64 entry:
     65 ; ELF64-LABEL: ret5
     66 ; ELF64: clrldi {{[0-9]+}}, {{[0-9]+}}, 48
     67 ; ELF64: blr
     68   ret i16 %a
     69 }
     70 
     71 define i16 @ret6(i16 %a) nounwind {
     72 entry:
     73 ; ELF64-LABEL: ret6
     74 ; ELF64: clrldi {{[0-9]+}}, {{[0-9]+}}, 48
     75 ; ELF64: blr
     76   ret i16 %a
     77 }
     78 
     79 define signext i32 @ret7(i32 signext %a) nounwind {
     80 entry:
     81 ; ELF64-LABEL: ret7
     82 ; ELF64: extsw
     83 ; ELF64: blr
     84   ret i32 %a
     85 }
     86 
     87 define zeroext i32 @ret8(i32 signext %a) nounwind {
     88 entry:
     89 ; ELF64-LABEL: ret8
     90 ; ELF64: clrldi {{[0-9]+}}, {{[0-9]+}}, 32
     91 ; ELF64: blr
     92   ret i32 %a
     93 }
     94 
     95 define i32 @ret9(i32 %a) nounwind {
     96 entry:
     97 ; ELF64-LABEL: ret9
     98 ; ELF64: clrldi {{[0-9]+}}, {{[0-9]+}}, 32
     99 ; ELF64: blr
    100   ret i32 %a
    101 }
    102 
    103 define i64 @ret10(i64 %a) nounwind {
    104 entry:
    105 ; ELF64-LABEL: ret10
    106 ; ELF64-NOT: exts
    107 ; ELF64-NOT: clrldi
    108 ; ELF64-NOT: rldicl
    109 ; ELF64: blr
    110   ret i64 %a
    111 }
    112 
    113 define float @ret11(float %a) nounwind {
    114 entry:
    115 ; ELF64-LABEL: ret11
    116 ; ELF64: blr
    117   ret float %a
    118 }
    119 
    120 define double @ret12(double %a) nounwind {
    121 entry:
    122 ; ELF64-LABEL: ret12
    123 ; ELF64: blr
    124   ret double %a
    125 }
    126 
    127 define i8 @ret13() nounwind {
    128 entry:
    129 ; ELF64-LABEL: ret13
    130 ; ELF64: li
    131 ; ELF64: blr
    132   ret i8 15;
    133 }
    134 
    135 define i16 @ret14() nounwind {
    136 entry:
    137 ; ELF64-LABEL: ret14
    138 ; ELF64: li
    139 ; ELF64: blr
    140   ret i16 -225;
    141 }
    142 
    143 define i32 @ret15() nounwind {
    144 entry:
    145 ; ELF64-LABEL: ret15
    146 ; ELF64: lis
    147 ; ELF64: ori
    148 ; ELF64: blr
    149   ret i32 278135;
    150 }
    151 
    152 define i64 @ret16() nounwind {
    153 entry:
    154 ; ELF64-LABEL: ret16
    155 ; ELF64: li
    156 ; ELF64: sldi
    157 ; ELF64: oris
    158 ; ELF64: ori
    159 ; ELF64: blr
    160   ret i64 27813515225;
    161 }
    162 
    163 define float @ret17() nounwind {
    164 entry:
    165 ; ELF64-LABEL: ret17
    166 ; ELF64: addis
    167 ; ELF64: lfs
    168 ; ELF64: blr
    169   ret float 2.5;
    170 }
    171 
    172 define double @ret18() nounwind {
    173 entry:
    174 ; ELF64-LABEL: ret18
    175 ; ELF64: addis
    176 ; ELF64: lfd
    177 ; ELF64: blr
    178   ret double 2.5e-33;
    179 }
    180 
    181 define zeroext i32 @ret19() nounwind {
    182 entry:
    183 ; ELF64-LABEL: ret19
    184 ; ELF64: li
    185 ; ELF64: oris
    186 ; ELF64: ori
    187 ; ELF64: blr
    188   ret i32 -1
    189 }
    190 
    191 define zeroext i16 @ret20() nounwind {
    192 entry:
    193 ; ELF64-LABEL: ret20
    194 ; ELF64: lis{{.*}}0
    195 ; ELF64: ori{{.*}}32768
    196 ; ELF64: blr
    197   ret i16 32768
    198 }
    199