Home | History | Annotate | Download | only in PowerPC
      1 ; RUN: llc -mcpu=pwr8 -mattr=+vsx -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s
      2 
      3 define <2 x double> @test00(<2 x double>* %p1, <2 x double>* %p2) {
      4   %v1 = load <2 x double>, <2 x double>* %p1
      5   %v2 = load <2 x double>, <2 x double>* %p2
      6   %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 0, i32 0>
      7   ret <2 x double> %v3
      8 
      9 ; CHECK-LABEL: test00
     10 ; CHECK: lxvd2x 0, 0, 3
     11 ; CHECK: xxspltd 34, 0, 0
     12 }
     13 
     14 define <2 x double> @test01(<2 x double>* %p1, <2 x double>* %p2) {
     15   %v1 = load <2 x double>, <2 x double>* %p1
     16   %v2 = load <2 x double>, <2 x double>* %p2
     17   %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 0, i32 1>
     18   ret <2 x double> %v3
     19 
     20 ; CHECK-LABEL: test01
     21 ; CHECK: lxvd2x 0, 0, 3
     22 ; CHECK: xxswapd 34, 0
     23 }
     24 
     25 define <2 x double> @test02(<2 x double>* %p1, <2 x double>* %p2) {
     26   %v1 = load <2 x double>, <2 x double>* %p1
     27   %v2 = load <2 x double>, <2 x double>* %p2
     28   %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 0, i32 2>
     29   ret <2 x double> %v3
     30 
     31 ; CHECK-LABEL: @test02
     32 ; CHECK: lxvd2x 0, 0, 3
     33 ; CHECK: lxvd2x 1, 0, 4
     34 ; CHECK: xxswapd 0, 0
     35 ; CHECK: xxswapd 1, 1
     36 ; CHECK: xxmrgld 34, 1, 0
     37 }
     38 
     39 define <2 x double> @test03(<2 x double>* %p1, <2 x double>* %p2) {
     40   %v1 = load <2 x double>, <2 x double>* %p1
     41   %v2 = load <2 x double>, <2 x double>* %p2
     42   %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 0, i32 3>
     43   ret <2 x double> %v3
     44 
     45 ; CHECK-LABEL: @test03
     46 ; CHECK: lxvd2x 0, 0, 3
     47 ; CHECK: lxvd2x 1, 0, 4
     48 ; CHECK: xxswapd 0, 0
     49 ; CHECK: xxswapd 1, 1
     50 ; CHECK: xxpermdi 34, 1, 0, 1
     51 }
     52 
     53 define <2 x double> @test10(<2 x double>* %p1, <2 x double>* %p2) {
     54   %v1 = load <2 x double>, <2 x double>* %p1
     55   %v2 = load <2 x double>, <2 x double>* %p2
     56   %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 1, i32 0>
     57   ret <2 x double> %v3
     58 
     59 ; CHECK-LABEL: @test10
     60 ; CHECK: lxvd2x 34, 0, 3
     61 }
     62 
     63 define <2 x double> @test11(<2 x double>* %p1, <2 x double>* %p2) {
     64   %v1 = load <2 x double>, <2 x double>* %p1
     65   %v2 = load <2 x double>, <2 x double>* %p2
     66   %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 1, i32 1>
     67   ret <2 x double> %v3
     68 
     69 ; CHECK-LABEL: @test11
     70 ; CHECK: lxvd2x 0, 0, 3
     71 ; CHECK: xxspltd 34, 0, 1
     72 }
     73 
     74 define <2 x double> @test12(<2 x double>* %p1, <2 x double>* %p2) {
     75   %v1 = load <2 x double>, <2 x double>* %p1
     76   %v2 = load <2 x double>, <2 x double>* %p2
     77   %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 1, i32 2>
     78   ret <2 x double> %v3
     79 
     80 ; CHECK-LABEL: @test12
     81 ; CHECK: lxvd2x 0, 0, 3
     82 ; CHECK: lxvd2x 1, 0, 4
     83 ; CHECK: xxswapd 0, 0
     84 ; CHECK: xxswapd 1, 1
     85 ; CHECK: xxpermdi 34, 1, 0, 2
     86 }
     87 
     88 define <2 x double> @test13(<2 x double>* %p1, <2 x double>* %p2) {
     89   %v1 = load <2 x double>, <2 x double>* %p1
     90   %v2 = load <2 x double>, <2 x double>* %p2
     91   %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 1, i32 3>
     92   ret <2 x double> %v3
     93 
     94 ; CHECK-LABEL: @test13
     95 ; CHECK: lxvd2x 0, 0, 3
     96 ; CHECK: lxvd2x 1, 0, 4
     97 ; CHECK: xxswapd 0, 0
     98 ; CHECK: xxswapd 1, 1
     99 ; CHECK: xxmrghd 34, 1, 0
    100 }
    101 
    102 define <2 x double> @test20(<2 x double>* %p1, <2 x double>* %p2) {
    103   %v1 = load <2 x double>, <2 x double>* %p1
    104   %v2 = load <2 x double>, <2 x double>* %p2
    105   %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 2, i32 0>
    106   ret <2 x double> %v3
    107 
    108 ; CHECK-LABEL: @test20
    109 ; CHECK: lxvd2x 0, 0, 3
    110 ; CHECK: lxvd2x 1, 0, 4
    111 ; CHECK: xxswapd 0, 0
    112 ; CHECK: xxswapd 1, 1
    113 ; CHECK: xxmrgld 34, 0, 1
    114 }
    115 
    116 define <2 x double> @test21(<2 x double>* %p1, <2 x double>* %p2) {
    117   %v1 = load <2 x double>, <2 x double>* %p1
    118   %v2 = load <2 x double>, <2 x double>* %p2
    119   %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 2, i32 1>
    120   ret <2 x double> %v3
    121 
    122 ; CHECK-LABEL: @test21
    123 ; CHECK: lxvd2x 0, 0, 3
    124 ; CHECK: lxvd2x 1, 0, 4
    125 ; CHECK: xxswapd 0, 0
    126 ; CHECK: xxswapd 1, 1
    127 ; CHECK: xxpermdi 34, 0, 1, 1
    128 }
    129 
    130 define <2 x double> @test22(<2 x double>* %p1, <2 x double>* %p2) {
    131   %v1 = load <2 x double>, <2 x double>* %p1
    132   %v2 = load <2 x double>, <2 x double>* %p2
    133   %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 2, i32 2>
    134   ret <2 x double> %v3
    135 
    136 ; CHECK-LABEL: @test22
    137 ; CHECK: lxvd2x 0, 0, 4
    138 ; CHECK: xxspltd 34, 0, 0
    139 }
    140 
    141 define <2 x double> @test23(<2 x double>* %p1, <2 x double>* %p2) {
    142   %v1 = load <2 x double>, <2 x double>* %p1
    143   %v2 = load <2 x double>, <2 x double>* %p2
    144   %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 2, i32 3>
    145   ret <2 x double> %v3
    146 
    147 ; CHECK-LABEL: @test23
    148 ; CHECK: lxvd2x 0, 0, 4
    149 ; CHECK: xxswapd 34, 0
    150 }
    151 
    152 define <2 x double> @test30(<2 x double>* %p1, <2 x double>* %p2) {
    153   %v1 = load <2 x double>, <2 x double>* %p1
    154   %v2 = load <2 x double>, <2 x double>* %p2
    155   %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 3, i32 0>
    156   ret <2 x double> %v3
    157 
    158 ; CHECK-LABEL: @test30
    159 ; CHECK: lxvd2x 0, 0, 3
    160 ; CHECK: lxvd2x 1, 0, 4
    161 ; CHECK: xxswapd 0, 0
    162 ; CHECK: xxswapd 1, 1
    163 ; CHECK: xxpermdi 34, 0, 1, 2
    164 }
    165 
    166 define <2 x double> @test31(<2 x double>* %p1, <2 x double>* %p2) {
    167   %v1 = load <2 x double>, <2 x double>* %p1
    168   %v2 = load <2 x double>, <2 x double>* %p2
    169   %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 3, i32 1>
    170   ret <2 x double> %v3
    171 
    172 ; CHECK-LABEL: @test31
    173 ; CHECK: lxvd2x 0, 0, 3
    174 ; CHECK: lxvd2x 1, 0, 4
    175 ; CHECK: xxswapd 0, 0
    176 ; CHECK: xxswapd 1, 1
    177 ; CHECK: xxmrghd 34, 0, 1
    178 }
    179 
    180 define <2 x double> @test32(<2 x double>* %p1, <2 x double>* %p2) {
    181   %v1 = load <2 x double>, <2 x double>* %p1
    182   %v2 = load <2 x double>, <2 x double>* %p2
    183   %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 3, i32 2>
    184   ret <2 x double> %v3
    185 
    186 ; CHECK-LABEL: @test32
    187 ; CHECK: lxvd2x 34, 0, 4
    188 }
    189 
    190 define <2 x double> @test33(<2 x double>* %p1, <2 x double>* %p2) {
    191   %v1 = load <2 x double>, <2 x double>* %p1
    192   %v2 = load <2 x double>, <2 x double>* %p2
    193   %v3 = shufflevector <2 x double> %v1, <2 x double> %v2, <2 x i32> < i32 3, i32 3>
    194   ret <2 x double> %v3
    195 
    196 ; CHECK-LABEL: @test33
    197 ; CHECK: lxvd2x 0, 0, 4
    198 ; CHECK: xxspltd 34, 0, 1
    199 }
    200