1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=x86 -mcpu=core2 | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @a(i32* %x1) nounwind { 4*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: a: 5*9880d681SAndroid Build Coastguard Worker; CHECK: shrl %[[R:[^,]+]] 6*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %[[R]], %xmm0 7*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retl 8*9880d681SAndroid Build Coastguard Worker 9*9880d681SAndroid Build Coastguard Worker %x2 = load i32, i32* %x1 10*9880d681SAndroid Build Coastguard Worker %x3 = lshr i32 %x2, 1 11*9880d681SAndroid Build Coastguard Worker %x = trunc i32 %x3 to i16 12*9880d681SAndroid Build Coastguard Worker %r = insertelement <4 x i16> zeroinitializer, i16 %x, i32 0 13*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %r 14*9880d681SAndroid Build Coastguard Worker} 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @b(i32* %x1) nounwind { 17*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: b: 18*9880d681SAndroid Build Coastguard Worker; CHECK: shrl %e[[R:.]]x 19*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movzwl %[[R]]x, %e[[R]]x 20*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %e[[R]]x, %xmm0 21*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retl 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Worker %x2 = load i32, i32* %x1 24*9880d681SAndroid Build Coastguard Worker %x3 = lshr i32 %x2, 1 25*9880d681SAndroid Build Coastguard Worker %x = trunc i32 %x3 to i16 26*9880d681SAndroid Build Coastguard Worker %r = insertelement <8 x i16> zeroinitializer, i16 %x, i32 0 27*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %r 28*9880d681SAndroid Build Coastguard Worker} 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @c(i32* %x1) nounwind { 31*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: c: 32*9880d681SAndroid Build Coastguard Worker; CHECK: shrl %e[[R:.]]x 33*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movzwl %[[R]]x, %e[[R]]x 34*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %e[[R]]x, %xmm0 35*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retl 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Worker %x2 = load i32, i32* %x1 38*9880d681SAndroid Build Coastguard Worker %x3 = lshr i32 %x2, 1 39*9880d681SAndroid Build Coastguard Worker %x = trunc i32 %x3 to i8 40*9880d681SAndroid Build Coastguard Worker %r = insertelement <8 x i8> zeroinitializer, i8 %x, i32 0 41*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %r 42*9880d681SAndroid Build Coastguard Worker} 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @d(i32* %x1) nounwind { 45*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: d: 46*9880d681SAndroid Build Coastguard Worker; CHECK: shrl %e[[R:.]]x 47*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movzbl %[[R]]l, %e[[R]]x 48*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movd %e[[R]]x, %xmm0 49*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retl 50*9880d681SAndroid Build Coastguard Worker 51*9880d681SAndroid Build Coastguard Worker %x2 = load i32, i32* %x1 52*9880d681SAndroid Build Coastguard Worker %x3 = lshr i32 %x2, 1 53*9880d681SAndroid Build Coastguard Worker %x = trunc i32 %x3 to i8 54*9880d681SAndroid Build Coastguard Worker %r = insertelement <16 x i8> zeroinitializer, i8 %x, i32 0 55*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %r 56*9880d681SAndroid Build Coastguard Worker} 57*9880d681SAndroid Build Coastguard Worker 58