Home | History | Annotate | Download | only in X86
      1 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=corei7-avx -mattr=+avx | FileCheck %s
      2 
      3 ; CHECK: vbroadcastsd (%
      4 define <4 x i64> @A(i64* %ptr) nounwind uwtable readnone ssp {
      5 entry:
      6   %q = load i64* %ptr, align 8
      7   %vecinit.i = insertelement <4 x i64> undef, i64 %q, i32 0
      8   %vecinit2.i = insertelement <4 x i64> %vecinit.i, i64 %q, i32 1
      9   %vecinit4.i = insertelement <4 x i64> %vecinit2.i, i64 %q, i32 2
     10   %vecinit6.i = insertelement <4 x i64> %vecinit4.i, i64 %q, i32 3
     11   ret <4 x i64> %vecinit6.i
     12 }
     13 
     14 ; CHECK: vbroadcastss (%
     15 define <8 x i32> @B(i32* %ptr) nounwind uwtable readnone ssp {
     16 entry:
     17   %q = load i32* %ptr, align 4
     18   %vecinit.i = insertelement <8 x i32> undef, i32 %q, i32 0
     19   %vecinit2.i = insertelement <8 x i32> %vecinit.i, i32 %q, i32 1
     20   %vecinit4.i = insertelement <8 x i32> %vecinit2.i, i32 %q, i32 2
     21   %vecinit6.i = insertelement <8 x i32> %vecinit4.i, i32 %q, i32 3
     22   ret <8 x i32> %vecinit6.i
     23 }
     24 
     25 ; CHECK: vbroadcastsd (%
     26 define <4 x double> @C(double* %ptr) nounwind uwtable readnone ssp {
     27 entry:
     28   %q = load double* %ptr, align 8
     29   %vecinit.i = insertelement <4 x double> undef, double %q, i32 0
     30   %vecinit2.i = insertelement <4 x double> %vecinit.i, double %q, i32 1
     31   %vecinit4.i = insertelement <4 x double> %vecinit2.i, double %q, i32 2
     32   %vecinit6.i = insertelement <4 x double> %vecinit4.i, double %q, i32 3
     33   ret <4 x double> %vecinit6.i
     34 }
     35 
     36 ; CHECK: vbroadcastss (%
     37 define <8 x float> @D(float* %ptr) nounwind uwtable readnone ssp {
     38 entry:
     39   %q = load float* %ptr, align 4
     40   %vecinit.i = insertelement <8 x float> undef, float %q, i32 0
     41   %vecinit2.i = insertelement <8 x float> %vecinit.i, float %q, i32 1
     42   %vecinit4.i = insertelement <8 x float> %vecinit2.i, float %q, i32 2
     43   %vecinit6.i = insertelement <8 x float> %vecinit4.i, float %q, i32 3
     44   ret <8 x float> %vecinit6.i
     45 }
     46 
     47 ;;;; 128-bit versions
     48 
     49 ; CHECK: vbroadcastss (%
     50 define <4 x float> @e(float* %ptr) nounwind uwtable readnone ssp {
     51 entry:
     52   %q = load float* %ptr, align 4
     53   %vecinit.i = insertelement <4 x float> undef, float %q, i32 0
     54   %vecinit2.i = insertelement <4 x float> %vecinit.i, float %q, i32 1
     55   %vecinit4.i = insertelement <4 x float> %vecinit2.i, float %q, i32 2
     56   %vecinit6.i = insertelement <4 x float> %vecinit4.i, float %q, i32 3
     57   ret <4 x float> %vecinit6.i
     58 }
     59 
     60 
     61 ; CHECK: _e2
     62 ; CHECK-NOT: vbroadcastss
     63 ; CHECK: ret
     64 define <4 x float> @_e2(float* %ptr) nounwind uwtable readnone ssp {
     65     %vecinit.i = insertelement <4 x float> undef, float      0xbf80000000000000, i32 0
     66   %vecinit2.i = insertelement <4 x float> %vecinit.i, float  0xbf80000000000000, i32 1
     67   %vecinit4.i = insertelement <4 x float> %vecinit2.i, float 0xbf80000000000000, i32 2
     68   %vecinit6.i = insertelement <4 x float> %vecinit4.i, float 0xbf80000000000000, i32 3
     69   ret <4 x float> %vecinit6.i
     70 }
     71 
     72 
     73 ; CHECK: vbroadcastss (%
     74 define <4 x i32> @F(i32* %ptr) nounwind uwtable readnone ssp {
     75 entry:
     76   %q = load i32* %ptr, align 4
     77   %vecinit.i = insertelement <4 x i32> undef, i32 %q, i32 0
     78   %vecinit2.i = insertelement <4 x i32> %vecinit.i, i32 %q, i32 1
     79   %vecinit4.i = insertelement <4 x i32> %vecinit2.i, i32 %q, i32 2
     80   %vecinit6.i = insertelement <4 x i32> %vecinit4.i, i32 %q, i32 3
     81   ret <4 x i32> %vecinit6.i
     82 }
     83 
     84 ; Unsupported vbroadcasts
     85 
     86 ; CHECK: _G
     87 ; CHECK-NOT: broadcast (%
     88 ; CHECK: ret
     89 define <2 x i64> @G(i64* %ptr) nounwind uwtable readnone ssp {
     90 entry:
     91   %q = load i64* %ptr, align 8
     92   %vecinit.i = insertelement <2 x i64> undef, i64 %q, i32 0
     93   %vecinit2.i = insertelement <2 x i64> %vecinit.i, i64 %q, i32 1
     94   ret <2 x i64> %vecinit2.i
     95 }
     96 
     97 ; CHECK: _H
     98 ; CHECK-NOT: broadcast
     99 ; CHECK: ret
    100 define <4 x i32> @H(<4 x i32> %a) {
    101   %x = shufflevector <4 x i32> %a, <4 x i32> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
    102   ret <4 x i32> %x
    103 }
    104 
    105 ; CHECK: _I
    106 ; CHECK-NOT: broadcast (%
    107 ; CHECK: ret
    108 define <2 x double> @I(double* %ptr) nounwind uwtable readnone ssp {
    109 entry:
    110   %q = load double* %ptr, align 4
    111   %vecinit.i = insertelement <2 x double> undef, double %q, i32 0
    112   %vecinit2.i = insertelement <2 x double> %vecinit.i, double %q, i32 1
    113   ret <2 x double> %vecinit2.i
    114 }
    115 
    116 ; CHECK: _RR
    117 ; CHECK: vbroadcastss (%
    118 ; CHECK: ret
    119 define <4 x float> @_RR(float* %ptr, i32* %k) nounwind uwtable readnone ssp {
    120 entry:
    121   %q = load float* %ptr, align 4
    122   %vecinit.i = insertelement <4 x float> undef, float %q, i32 0
    123   %vecinit2.i = insertelement <4 x float> %vecinit.i, float %q, i32 1
    124   %vecinit4.i = insertelement <4 x float> %vecinit2.i, float %q, i32 2
    125   %vecinit6.i = insertelement <4 x float> %vecinit4.i, float %q, i32 3
    126   ; force a chain
    127   %j = load i32* %k, align 4
    128   store i32 %j, i32* undef
    129   ret <4 x float> %vecinit6.i
    130 }
    131 
    132 
    133 ; CHECK: _RR2
    134 ; CHECK: vbroadcastss (%
    135 ; CHECK: ret
    136 define <4 x float> @_RR2(float* %ptr, i32* %k) nounwind uwtable readnone ssp {
    137 entry:
    138   %q = load float* %ptr, align 4
    139   %v = insertelement <4 x float> undef, float %q, i32 0
    140   %t = shufflevector <4 x float> %v, <4 x float> undef, <4 x i32> zeroinitializer
    141   ret <4 x float> %t
    142 }
    143 
    144