xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/2009-06-05-VZextByteShort.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
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