Manman Ren | 413a6cb | 2014-01-31 01:10:35 +0000 | [diff] [blame] | 1 | ; RUN: llc < %s -mtriple=x86_64-unknown-linux -mcpu=corei7-avx | FileCheck %s |
| 2 | |
| 3 | ; These tests check that an insert_subvector which replaces one of the halves |
| 4 | ; of a concat_vectors is optimized into a single vinsertf128. |
| 5 | |
Robert Lougher | 48ee75b | 2014-02-10 12:42:13 +0000 | [diff] [blame^] | 6 | |
Manman Ren | 413a6cb | 2014-01-31 01:10:35 +0000 | [diff] [blame] | 7 | declare <8 x float> @llvm.x86.avx.vinsertf128.ps.256(<8 x float>, <4 x float>, i8) |
| 8 | |
| 9 | define <8 x float> @lower_half(<4 x float> %v1, <4 x float> %v2, <4 x float> %v3) { |
| 10 | %1 = shufflevector <4 x float> %v1, <4 x float> %v2, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> |
| 11 | %2 = tail call <8 x float> @llvm.x86.avx.vinsertf128.ps.256(<8 x float> %1, <4 x float> %v3, i8 0) |
| 12 | ret <8 x float> %2 |
| 13 | |
| 14 | ; CHECK-LABEL: lower_half |
| 15 | ; CHECK-NOT: vinsertf128 |
| 16 | ; CHECK: vinsertf128 $1, %xmm1, %ymm2, %ymm0 |
| 17 | ; CHECK-NEXT: ret |
| 18 | } |
| 19 | |
| 20 | define <8 x float> @upper_half(<4 x float> %v1, <4 x float> %v2, <4 x float> %v3) { |
| 21 | %1 = shufflevector <4 x float> %v1, <4 x float> %v2, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> |
| 22 | %2 = tail call <8 x float> @llvm.x86.avx.vinsertf128.ps.256(<8 x float> %1, <4 x float> %v3, i8 1) |
| 23 | ret <8 x float> %2 |
| 24 | |
| 25 | ; CHECK-LABEL: upper_half |
| 26 | ; CHECK-NOT: vinsertf128 |
| 27 | ; CHECK: vinsertf128 $1, %xmm2, %ymm0, %ymm0 |
| 28 | ; CHECK-NEXT: ret |
| 29 | } |