Home | History | Annotate | Download | only in CellSPU
      1 ; RUN: llc < %s -march=cellspu > %t1.s
      2 ; RUN: grep and    %t1.s | count 2
      3 ; RUN: grep orc    %t1.s | count 85
      4 ; RUN: grep ori    %t1.s | count 30
      5 ; RUN: grep orhi   %t1.s | count 30
      6 ; RUN: grep orbi   %t1.s | count 15
      7 target datalayout = "E-p:32:32:128-f64:64:128-f32:32:128-i64:32:128-i32:32:128-i16:16:128-i8:8:128-i1:8:128-a0:0:128-v128:128:128-s0:128:128"
      8 target triple = "spu"
      9 
     10 ; OR instruction generation:
     11 define <4 x i32> @or_v4i32_1(<4 x i32> %arg1, <4 x i32> %arg2) {
     12         %A = or <4 x i32> %arg1, %arg2
     13         ret <4 x i32> %A
     14 }
     15 
     16 define <4 x i32> @or_v4i32_2(<4 x i32> %arg1, <4 x i32> %arg2) {
     17         %A = or <4 x i32> %arg2, %arg1
     18         ret <4 x i32> %A
     19 }
     20 
     21 define <8 x i16> @or_v8i16_1(<8 x i16> %arg1, <8 x i16> %arg2) {
     22         %A = or <8 x i16> %arg1, %arg2
     23         ret <8 x i16> %A
     24 }
     25 
     26 define <8 x i16> @or_v8i16_2(<8 x i16> %arg1, <8 x i16> %arg2) {
     27         %A = or <8 x i16> %arg2, %arg1
     28         ret <8 x i16> %A
     29 }
     30 
     31 define <16 x i8> @or_v16i8_1(<16 x i8> %arg1, <16 x i8> %arg2) {
     32         %A = or <16 x i8> %arg2, %arg1
     33         ret <16 x i8> %A
     34 }
     35 
     36 define <16 x i8> @or_v16i8_2(<16 x i8> %arg1, <16 x i8> %arg2) {
     37         %A = or <16 x i8> %arg1, %arg2
     38         ret <16 x i8> %A
     39 }
     40 
     41 define i32 @or_i32_1(i32 %arg1, i32 %arg2) {
     42         %A = or i32 %arg2, %arg1
     43         ret i32 %A
     44 }
     45 
     46 define i32 @or_i32_2(i32 %arg1, i32 %arg2) {
     47         %A = or i32 %arg1, %arg2
     48         ret i32 %A
     49 }
     50 
     51 define i16 @or_i16_1(i16 %arg1, i16 %arg2) {
     52         %A = or i16 %arg2, %arg1
     53         ret i16 %A
     54 }
     55 
     56 define i16 @or_i16_2(i16 %arg1, i16 %arg2) {
     57         %A = or i16 %arg1, %arg2
     58         ret i16 %A
     59 }
     60 
     61 define i8 @or_i8_1(i8 %arg1, i8 %arg2) {
     62         %A = or i8 %arg2, %arg1
     63         ret i8 %A
     64 }
     65 
     66 define i8 @or_i8_2(i8 %arg1, i8 %arg2) {
     67         %A = or i8 %arg1, %arg2
     68         ret i8 %A
     69 }
     70 
     71 ; ORC instruction generation:
     72 define <4 x i32> @orc_v4i32_1(<4 x i32> %arg1, <4 x i32> %arg2) {
     73         %A = xor <4 x i32> %arg2, < i32 -1, i32 -1, i32 -1, i32 -1 >
     74         %B = or <4 x i32> %arg1, %A
     75         ret <4 x i32> %B
     76 }
     77 
     78 define <4 x i32> @orc_v4i32_2(<4 x i32> %arg1, <4 x i32> %arg2) {
     79         %A = xor <4 x i32> %arg1, < i32 -1, i32 -1, i32 -1, i32 -1 >
     80         %B = or <4 x i32> %arg2, %A
     81         ret <4 x i32> %B
     82 }
     83 
     84 define <4 x i32> @orc_v4i32_3(<4 x i32> %arg1, <4 x i32> %arg2) {
     85         %A = xor <4 x i32> %arg1, < i32 -1, i32 -1, i32 -1, i32 -1 >
     86         %B = or <4 x i32> %A, %arg2
     87         ret <4 x i32> %B
     88 }
     89 
     90 define <8 x i16> @orc_v8i16_1(<8 x i16> %arg1, <8 x i16> %arg2) {
     91         %A = xor <8 x i16> %arg2, < i16 -1, i16 -1, i16 -1, i16 -1,
     92                                     i16 -1, i16 -1, i16 -1, i16 -1 >
     93         %B = or <8 x i16> %arg1, %A
     94         ret <8 x i16> %B
     95 }
     96 
     97 define <8 x i16> @orc_v8i16_2(<8 x i16> %arg1, <8 x i16> %arg2) {
     98         %A = xor <8 x i16> %arg1, < i16 -1, i16 -1, i16 -1, i16 -1,
     99                                     i16 -1, i16 -1, i16 -1, i16 -1 >
    100         %B = or <8 x i16> %arg2, %A
    101         ret <8 x i16> %B
    102 }
    103 
    104 define <16 x i8> @orc_v16i8_1(<16 x i8> %arg1, <16 x i8> %arg2) {
    105         %A = xor <16 x i8> %arg1, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1,
    106                                     i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1,
    107                                     i8 -1, i8 -1, i8 -1, i8 -1 >
    108         %B = or <16 x i8> %arg2, %A
    109         ret <16 x i8> %B
    110 }
    111 
    112 define <16 x i8> @orc_v16i8_2(<16 x i8> %arg1, <16 x i8> %arg2) {
    113         %A = xor <16 x i8> %arg2, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1,
    114                                     i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1,
    115                                     i8 -1, i8 -1, i8 -1, i8 -1 >
    116         %B = or <16 x i8> %arg1, %A
    117         ret <16 x i8> %B
    118 }
    119 
    120 define <16 x i8> @orc_v16i8_3(<16 x i8> %arg1, <16 x i8> %arg2) {
    121         %A = xor <16 x i8> %arg2, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1,
    122                                     i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1,
    123                                     i8 -1, i8 -1, i8 -1, i8 -1 >
    124         %B = or <16 x i8> %A, %arg1
    125         ret <16 x i8> %B
    126 }
    127 
    128 define i32 @orc_i32_1(i32 %arg1, i32 %arg2) {
    129         %A = xor i32 %arg2, -1
    130         %B = or i32 %A, %arg1
    131         ret i32 %B
    132 }
    133 
    134 define i32 @orc_i32_2(i32 %arg1, i32 %arg2) {
    135         %A = xor i32 %arg1, -1
    136         %B = or i32 %A, %arg2
    137         ret i32 %B
    138 }
    139 
    140 define i32 @orc_i32_3(i32 %arg1, i32 %arg2) {
    141         %A = xor i32 %arg2, -1
    142         %B = or i32 %arg1, %A
    143         ret i32 %B
    144 }
    145 
    146 define i16 @orc_i16_1(i16 %arg1, i16 %arg2) {
    147         %A = xor i16 %arg2, -1
    148         %B = or i16 %A, %arg1
    149         ret i16 %B
    150 }
    151 
    152 define i16 @orc_i16_2(i16 %arg1, i16 %arg2) {
    153         %A = xor i16 %arg1, -1
    154         %B = or i16 %A, %arg2
    155         ret i16 %B
    156 }
    157 
    158 define i16 @orc_i16_3(i16 %arg1, i16 %arg2) {
    159         %A = xor i16 %arg2, -1
    160         %B = or i16 %arg1, %A
    161         ret i16 %B
    162 }
    163 
    164 define i8 @orc_i8_1(i8 %arg1, i8 %arg2) {
    165         %A = xor i8 %arg2, -1
    166         %B = or i8 %A, %arg1
    167         ret i8 %B
    168 }
    169 
    170 define i8 @orc_i8_2(i8 %arg1, i8 %arg2) {
    171         %A = xor i8 %arg1, -1
    172         %B = or i8 %A, %arg2
    173         ret i8 %B
    174 }
    175 
    176 define i8 @orc_i8_3(i8 %arg1, i8 %arg2) {
    177         %A = xor i8 %arg2, -1
    178         %B = or i8 %arg1, %A
    179         ret i8 %B
    180 }
    181 
    182 ; ORI instruction generation (i32 data type):
    183 define <4 x i32> @ori_v4i32_1(<4 x i32> %in) {
    184         %tmp2 = or <4 x i32> %in, < i32 511, i32 511, i32 511, i32 511 >
    185         ret <4 x i32> %tmp2
    186 }
    187 
    188 define <4 x i32> @ori_v4i32_2(<4 x i32> %in) {
    189         %tmp2 = or <4 x i32> %in, < i32 510, i32 510, i32 510, i32 510 >
    190         ret <4 x i32> %tmp2
    191 }
    192 
    193 define <4 x i32> @ori_v4i32_3(<4 x i32> %in) {
    194         %tmp2 = or <4 x i32> %in, < i32 -1, i32 -1, i32 -1, i32 -1 >
    195         ret <4 x i32> %tmp2
    196 }
    197 
    198 define <4 x i32> @ori_v4i32_4(<4 x i32> %in) {
    199         %tmp2 = or <4 x i32> %in, < i32 -512, i32 -512, i32 -512, i32 -512 >
    200         ret <4 x i32> %tmp2
    201 }
    202 
    203 define zeroext i32 @ori_u32(i32 zeroext  %in)   {
    204         %tmp37 = or i32 %in, 37         ; <i32> [#uses=1]
    205         ret i32 %tmp37
    206 }
    207 
    208 define signext i32 @ori_i32(i32 signext  %in)   {
    209         %tmp38 = or i32 %in, 37         ; <i32> [#uses=1]
    210         ret i32 %tmp38
    211 }
    212 
    213 ; ORHI instruction generation (i16 data type):
    214 define <8 x i16> @orhi_v8i16_1(<8 x i16> %in) {
    215         %tmp2 = or <8 x i16> %in, < i16 511, i16 511, i16 511, i16 511,
    216                                     i16 511, i16 511, i16 511, i16 511 >
    217         ret <8 x i16> %tmp2
    218 }
    219 
    220 define <8 x i16> @orhi_v8i16_2(<8 x i16> %in) {
    221         %tmp2 = or <8 x i16> %in, < i16 510, i16 510, i16 510, i16 510,
    222                                     i16 510, i16 510, i16 510, i16 510 >
    223         ret <8 x i16> %tmp2
    224 }
    225 
    226 define <8 x i16> @orhi_v8i16_3(<8 x i16> %in) {
    227         %tmp2 = or <8 x i16> %in, < i16 -1, i16 -1, i16 -1, i16 -1, i16 -1,
    228                                     i16 -1, i16 -1, i16 -1 >
    229         ret <8 x i16> %tmp2
    230 }
    231 
    232 define <8 x i16> @orhi_v8i16_4(<8 x i16> %in) {
    233         %tmp2 = or <8 x i16> %in, < i16 -512, i16 -512, i16 -512, i16 -512,
    234                                     i16 -512, i16 -512, i16 -512, i16 -512 >
    235         ret <8 x i16> %tmp2
    236 }
    237 
    238 define zeroext i16 @orhi_u16(i16 zeroext  %in)   {
    239         %tmp37 = or i16 %in, 37         ; <i16> [#uses=1]
    240         ret i16 %tmp37
    241 }
    242 
    243 define signext i16 @orhi_i16(i16 signext  %in)   {
    244         %tmp38 = or i16 %in, 37         ; <i16> [#uses=1]
    245         ret i16 %tmp38
    246 }
    247 
    248 ; ORBI instruction generation (i8 data type):
    249 define <16 x i8> @orbi_v16i8(<16 x i8> %in) {
    250         %tmp2 = or <16 x i8> %in, < i8 42, i8 42, i8 42, i8 42, i8 42, i8 42,
    251                                     i8 42, i8 42, i8 42, i8 42, i8 42, i8 42,
    252                                     i8 42, i8 42, i8 42, i8 42 >
    253         ret <16 x i8> %tmp2
    254 }
    255 
    256 define zeroext i8 @orbi_u8(i8 zeroext  %in)   {
    257         %tmp37 = or i8 %in, 37         ; <i8> [#uses=1]
    258         ret i8 %tmp37
    259 }
    260 
    261 define signext i8 @orbi_i8(i8 signext  %in)   {
    262         %tmp38 = or i8 %in, 37         ; <i8> [#uses=1]
    263         ret i8 %tmp38
    264 }
    265