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 @x = common global <8 x float> zeroinitializer, align 32
      4 @y = common global <4 x double> zeroinitializer, align 32
      5 @z = common global <4 x float> zeroinitializer, align 16
      6 
      7 define void @zero128() nounwind ssp {
      8 entry:
      9   ; CHECK: vxorps
     10   ; CHECK: vmovaps
     11   store <4 x float> zeroinitializer, <4 x float>* @z, align 16
     12   ret void
     13 }
     14 
     15 define void @zero256() nounwind ssp {
     16 entry:
     17   ; CHECK: vxorps
     18   ; CHECK: vmovaps
     19   ; CHECK: vmovaps
     20   store <8 x float> zeroinitializer, <8 x float>* @x, align 32
     21   store <4 x double> zeroinitializer, <4 x double>* @y, align 32
     22   ret void
     23 }
     24 
     25 ; CHECK: vpcmpeqd
     26 ; CHECK: vinsertf128 $1
     27 define void @ones([0 x float]* nocapture %RET, [0 x float]* nocapture %aFOO) nounwind {
     28 allocas:
     29   %ptr2vec615 = bitcast [0 x float]* %RET to <8 x float>*
     30   store <8 x float> <float 0xFFFFFFFFE0000000, float 0xFFFFFFFFE0000000, float
     31 0xFFFFFFFFE0000000, float 0xFFFFFFFFE0000000, float 0xFFFFFFFFE0000000, float
     32 0xFFFFFFFFE0000000, float 0xFFFFFFFFE0000000, float 0xFFFFFFFFE0000000>, <8 x
     33 float>* %ptr2vec615, align 32
     34   ret void
     35 }
     36 
     37 ; CHECK: vpcmpeqd
     38 ; CHECK: vinsertf128 $1
     39 define void @ones2([0 x i32]* nocapture %RET, [0 x i32]* nocapture %aFOO) nounwind {
     40 allocas:
     41   %ptr2vec615 = bitcast [0 x i32]* %RET to <8 x i32>*
     42   store <8 x i32> <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1>, <8 x i32>* %ptr2vec615, align 32
     43   ret void
     44 }
     45 
     46 ;;; Just make sure this doesn't crash
     47 ; CHECK: _ISelCrash
     48 define <4 x i64> @ISelCrash(<4 x i64> %a) nounwind uwtable readnone ssp {
     49 entry:
     50   %shuffle = shufflevector <4 x i64> %a, <4 x i64> undef, <4 x i32> <i32 2, i32 3, i32 4, i32 4>
     51   ret <4 x i64> %shuffle
     52 }
     53 
     54 ;;; Don't crash on movd
     55 ; CHECK: _VMOVZQI2PQI
     56 ; CHECK: vmovd (%
     57 define <8 x i32> @VMOVZQI2PQI([0 x float]* nocapture %aFOO) nounwind {
     58 allocas:
     59   %ptrcast.i33.i = bitcast [0 x float]* %aFOO to i32*
     60   %val.i34.i = load i32, i32* %ptrcast.i33.i, align 4
     61   %ptroffset.i22.i992 = getelementptr [0 x float], [0 x float]* %aFOO, i64 0, i64 1
     62   %ptrcast.i23.i = bitcast float* %ptroffset.i22.i992 to i32*
     63   %val.i24.i = load i32, i32* %ptrcast.i23.i, align 4
     64   %updatedret.i30.i = insertelement <8 x i32> undef, i32 %val.i34.i, i32 1
     65   ret <8 x i32> %updatedret.i30.i
     66 }
     67 
     68 ;;;; Don't crash on fneg
     69 ; rdar://10566486
     70 ; CHECK: fneg
     71 ; CHECK: vxorps
     72 define <16 x float> @fneg(<16 x float> %a) nounwind {
     73   %1 = fsub <16 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %a
     74   ret <16 x float> %1
     75 }
     76 
     77 ;;; Don't crash on build vector
     78 ; CHECK: @build_vec_16x16
     79 ; CHECK: vmovd
     80 define <16 x i16> @build_vec_16x16(i16 %a) nounwind readonly {
     81   %res = insertelement <16 x i16> <i16 undef, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, i16 %a, i32 0
     82   ret <16 x i16> %res
     83 }
     84 
     85 ;;; Check that VMOVPQIto64rr generates the assembly string "vmovq".  Previously
     86 ;;; an incorrect mnemonic of "movd" was printed for this instruction.
     87 ; CHECK: VMOVPQIto64rr
     88 ; CHECK: vmovq
     89 define i64 @VMOVPQIto64rr(<2 x i64> %a) {
     90 entry:
     91   %vecext.i = extractelement <2 x i64> %a, i32 0
     92   ret i64 %vecext.i
     93 }
     94 
     95 ; PR22685
     96 ; CHECK: mov00
     97 ; CHECK: vmovss
     98 define <8 x float> @mov00_8f32(float* %ptr) {
     99   %val = load float, float* %ptr
    100   %vec = insertelement <8 x float> zeroinitializer, float %val, i32 0
    101   ret <8 x float> %vec
    102 }
    103