1 ;RUN: llc --march=cellspu %s -o - | FileCheck %s 2 %vec = type <2 x i32> 3 4 define %vec @test_ret(%vec %param) 5 { 6 ;CHECK: bi $lr 7 ret %vec %param 8 } 9 10 define %vec @test_add(%vec %param) 11 { 12 ;CHECK: shufb 13 ;CHECK: addx 14 %1 = add %vec %param, %param 15 ;CHECK: bi $lr 16 ret %vec %1 17 } 18 19 define %vec @test_sub(%vec %param) 20 { 21 %1 = sub %vec %param, <i32 1, i32 1> 22 ;CHECK: bi $lr 23 ret %vec %1 24 } 25 26 define %vec @test_mul(%vec %param) 27 { 28 %1 = mul %vec %param, %param 29 ;CHECK: bi $lr 30 ret %vec %1 31 } 32 33 define <2 x i32> @test_splat(i32 %param ) { 34 ;see svn log for why this is here... 35 ;CHECK-NOT: or $3, $3, $3 36 ;CHECK: lqa 37 ;CHECK: shufb 38 %sv = insertelement <1 x i32> undef, i32 %param, i32 0 39 %rv = shufflevector <1 x i32> %sv, <1 x i32> undef, <2 x i32> zeroinitializer 40 ;CHECK: bi $lr 41 ret <2 x i32> %rv 42 } 43 44 define i32 @test_extract() { 45 ;CHECK: shufb $3 46 %rv = extractelement <2 x i32> zeroinitializer, i32 undef ; <i32> [#uses=1] 47 ;CHECK: bi $lr 48 ret i32 %rv 49 } 50 51 define void @test_store( %vec %val, %vec* %ptr) 52 { 53 store %vec %val, %vec* %ptr 54 ret void 55 } 56 57 define <2 x i32>* @test_alignment( [2 x <2 x i32>]* %ptr) 58 { 59 %rv = getelementptr [2 x <2 x i32>]* %ptr, i32 0, i32 1 60 ret <2 x i32>* %rv 61 } 62