Home | History | Annotate | Download | only in X86
      1 ; Test that vectors are scalarized/lowered correctly
      2 ; (with both legalization methods).
      3 ; RUN: llc -march=x86 -promote-elements < %s
      4 ; RUN: llc -march=x86                   < %s
      5 
      6 ; A simple test to check copyToParts and copyFromParts.
      7 
      8 define <4 x i64> @test_param_0(<4 x i64> %A, <2 x i32> %B, <4 x i8> %C)  {
      9    ret <4 x i64> %A
     10 }
     11 
     12 define <2 x i32> @test_param_1(<4 x i64> %A, <2 x i32> %B, <4 x i8> %C)  {
     13    ret <2 x i32> %B
     14 }
     15 
     16 define <4 x i8> @test_param_2(<4 x i64> %A, <2 x i32> %B, <4 x i8> %C)  {
     17    ret <4 x i8> %C
     18 }
     19 
     20 ; Simple tests to check arithmetic and vector operations on types which need to
     21 ; be legalized (no loads/stores to/from memory here).
     22 
     23 define <4 x i64> @test_arith_0(<4 x i64> %A, <2 x i32> %B, <4 x i8> %C)  {
     24    %K = add <4 x i64> %A, <i64 0, i64 1, i64 3, i64 9>
     25    ret <4 x i64> %K
     26 }
     27 
     28 define <2 x i32> @test_arith_1(<4 x i64> %A, <2 x i32> %B, <4 x i8> %C)  {
     29    %K = add <2 x i32> %B, <i32 0, i32 1>
     30    ret <2 x i32> %K
     31 }
     32 
     33 define <4 x i8> @test_arith_2(<4 x i64> %A, <2 x i32> %B, <4 x i8> %C)  {
     34    %K = add <4 x i8> %C, <i8 0, i8 1, i8 3, i8 9>
     35    ret <4 x i8> %K
     36 }
     37 
     38 define i8 @test_arith_3(<4 x i64> %A, <2 x i32> %B, <4 x i8> %C)  {
     39    %K = add <4 x i8> %C, <i8 0, i8 1, i8 3, i8 9>
     40    %Y = extractelement <4 x i8> %K, i32 1
     41    ret i8 %Y
     42 }
     43 
     44 define <4 x i8> @test_arith_4(<4 x i64> %A, <2 x i32> %B, <4 x i8> %C)  {
     45    %Y = insertelement <4 x i8> %C, i8 1, i32 0
     46    ret <4 x i8> %Y
     47 }
     48 
     49 define <4 x i32> @test_arith_5(<4 x i64> %A, <2 x i32> %B, <4 x i32> %C)  {
     50    %Y = insertelement <4 x i32> %C, i32 1, i32 0
     51    ret <4 x i32> %Y
     52 }
     53 
     54 define <4 x i32> @test_arith_6(<4 x i64> %A, <2 x i32> %B, <4 x i32> %C)  {
     55    %F = extractelement <2 x i32> %B, i32 1
     56    %Y = insertelement <4 x i32> %C, i32 %F, i32 0
     57    ret <4 x i32> %Y
     58 }
     59 
     60 define <4 x i64> @test_arith_7(<4 x i64> %A, <2 x i32> %B, <4 x i32> %C)  {
     61    %F = extractelement <2 x i32> %B, i32 1
     62    %W = zext i32 %F to i64
     63    %Y = insertelement <4 x i64> %A, i64 %W, i32 0
     64    ret <4 x i64> %Y
     65 }
     66 
     67 define i64 @test_arith_8(<4 x i64> %A, <2 x i32> %B, <4 x i32> %C)  {
     68    %F = extractelement <2 x i32> %B, i32 1
     69    %W = zext i32 %F to i64
     70    %T = add i64 %W , 11
     71    ret i64 %T
     72 }
     73 
     74 define <4 x i64> @test_arith_9(<4 x i64> %A, <2 x i32> %B, <4 x i16> %C)  {
     75    %T = add <4 x i16> %C, %C
     76    %F0 = extractelement <4 x i16> %T, i32 0
     77    %F1 = extractelement <4 x i16> %T, i32 1
     78    %W0 = zext i16 %F0 to i64
     79    %W1 = zext i16 %F1 to i64
     80    %Y0 = insertelement <4 x i64> %A,  i64 %W0, i32 0
     81    %Y1 = insertelement <4 x i64> %Y0, i64 %W1, i32 2
     82    ret <4 x i64> %Y1
     83 }
     84 
     85 define <4 x i16> @test_arith_10(<4 x i64> %A, <2 x i32> %B, <4 x i32> %C)  {
     86    %F = bitcast <2 x i32> %B to <4 x i16>
     87    %T = add <4 x i16> %F , <i16 0, i16 1, i16 2, i16 3>
     88    ret <4 x i16> %T
     89 }
     90 
     91 
     92 ; Simple tests to check saving/loading from memory
     93 define <4 x i16> @test_mem_0(<4 x i64> %A, <2 x i32> %B, <4 x i32> %C)  {
     94    %F = bitcast <2 x i32> %B to <4 x i16>
     95    %T = add <4 x i16> %F , <i16 0, i16 1, i16 2, i16 3>
     96    ret <4 x i16> %T
     97 }
     98 
     99