Bruno Cardoso Lopes | 65b74e1 | 2011-07-21 01:55:47 +0000 | [diff] [blame] | 1 | ; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=corei7-avx -mattr=+avx | FileCheck %s |
| 2 | |
Bruno Cardoso Lopes | dbd4fe2 | 2011-07-21 02:24:08 +0000 | [diff] [blame] | 3 | ; FIXME: use avx versions for punpcklbw, punpckhbw and punpckhwd |
Bruno Cardoso Lopes | 65b74e1 | 2011-07-21 01:55:47 +0000 | [diff] [blame] | 4 | |
| 5 | ; CHECK: vextractf128 $0 |
| 6 | ; CHECK-NEXT: punpcklbw |
| 7 | ; CHECK-NEXT: punpckhbw |
Bruno Cardoso Lopes | 65b74e1 | 2011-07-21 01:55:47 +0000 | [diff] [blame] | 8 | ; CHECK-NEXT: vinsertf128 $1 |
| 9 | ; CHECK-NEXT: vpermilps $85 |
| 10 | define <32 x i8> @funcA(<32 x i8> %a) nounwind uwtable readnone ssp { |
| 11 | entry: |
| 12 | %shuffle = shufflevector <32 x i8> %a, <32 x i8> undef, <32 x i32> <i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5> |
| 13 | ret <32 x i8> %shuffle |
| 14 | } |
| 15 | |
Bruno Cardoso Lopes | dbd4fe2 | 2011-07-21 02:24:08 +0000 | [diff] [blame] | 16 | ; CHECK: vextractf128 $0 |
| 17 | ; CHECK-NEXT: punpckhwd |
Bruno Cardoso Lopes | dbd4fe2 | 2011-07-21 02:24:08 +0000 | [diff] [blame] | 18 | ; CHECK-NEXT: vinsertf128 $1 |
| 19 | ; CHECK-NEXT: vpermilps $85 |
| 20 | define <16 x i16> @funcB(<16 x i16> %a) nounwind uwtable readnone ssp { |
| 21 | entry: |
| 22 | %shuffle = shufflevector <16 x i16> %a, <16 x i16> undef, <16 x i32> <i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5> |
| 23 | ret <16 x i16> %shuffle |
| 24 | } |
| 25 | |
Bruno Cardoso Lopes | 6a32adc | 2011-07-25 23:05:25 +0000 | [diff] [blame] | 26 | ; CHECK: vmovd |
| 27 | ; CHECK-NEXT: movlhps |
| 28 | ; CHECK-NEXT: vinsertf128 $1 |
| 29 | define <4 x i64> @funcC(i64 %q) nounwind uwtable readnone ssp { |
| 30 | entry: |
| 31 | %vecinit.i = insertelement <4 x i64> undef, i64 %q, i32 0 |
| 32 | %vecinit2.i = insertelement <4 x i64> %vecinit.i, i64 %q, i32 1 |
| 33 | %vecinit4.i = insertelement <4 x i64> %vecinit2.i, i64 %q, i32 2 |
| 34 | %vecinit6.i = insertelement <4 x i64> %vecinit4.i, i64 %q, i32 3 |
| 35 | ret <4 x i64> %vecinit6.i |
| 36 | } |
| 37 | |
| 38 | ; CHECK: vshufpd |
| 39 | ; CHECK-NEXT: vinsertf128 $1 |
| 40 | define <4 x double> @funcD(double %q) nounwind uwtable readnone ssp { |
| 41 | entry: |
| 42 | %vecinit.i = insertelement <4 x double> undef, double %q, i32 0 |
| 43 | %vecinit2.i = insertelement <4 x double> %vecinit.i, double %q, i32 1 |
| 44 | %vecinit4.i = insertelement <4 x double> %vecinit2.i, double %q, i32 2 |
| 45 | %vecinit6.i = insertelement <4 x double> %vecinit4.i, double %q, i32 3 |
| 46 | ret <4 x double> %vecinit6.i |
| 47 | } |