xref: /llvm-project/llvm/test/CodeGen/X86/2009-06-05-VZextByteShort.ll (revision 2f448bf509432c1a19ec46ab8cbc7353c03c6280)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=i686-- -mcpu=core2 | FileCheck %s
3
4define <4 x i16> @a(ptr %x1) nounwind {
5; CHECK-LABEL: a:
6; CHECK:       # %bb.0:
7; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %eax
8; CHECK-NEXT:    movl (%eax), %eax
9; CHECK-NEXT:    shrl %eax
10; CHECK-NEXT:    movzwl %ax, %eax
11; CHECK-NEXT:    movd %eax, %xmm0
12; CHECK-NEXT:    retl
13
14  %x2 = load i32, ptr %x1
15  %x3 = lshr i32 %x2, 1
16  %x = trunc i32 %x3 to i16
17  %r = insertelement <4 x i16> zeroinitializer, i16 %x, i32 0
18  ret <4 x i16> %r
19}
20
21define <8 x i16> @b(ptr %x1) nounwind {
22; CHECK-LABEL: b:
23; CHECK:       # %bb.0:
24; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %eax
25; CHECK-NEXT:    movl (%eax), %eax
26; CHECK-NEXT:    shrl %eax
27; CHECK-NEXT:    movzwl %ax, %eax
28; CHECK-NEXT:    movd %eax, %xmm0
29; CHECK-NEXT:    retl
30
31  %x2 = load i32, ptr %x1
32  %x3 = lshr i32 %x2, 1
33  %x = trunc i32 %x3 to i16
34  %r = insertelement <8 x i16> zeroinitializer, i16 %x, i32 0
35  ret <8 x i16> %r
36}
37
38define <8 x i8> @c(ptr %x1) nounwind {
39; CHECK-LABEL: c:
40; CHECK:       # %bb.0:
41; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %eax
42; CHECK-NEXT:    movl (%eax), %eax
43; CHECK-NEXT:    shrl %eax
44; CHECK-NEXT:    movzbl %al, %eax
45; CHECK-NEXT:    movd %eax, %xmm0
46; CHECK-NEXT:    retl
47
48  %x2 = load i32, ptr %x1
49  %x3 = lshr i32 %x2, 1
50  %x = trunc i32 %x3 to i8
51  %r = insertelement <8 x i8> zeroinitializer, i8 %x, i32 0
52  ret <8 x i8> %r
53}
54
55define <16 x i8> @d(ptr %x1) nounwind {
56; CHECK-LABEL: d:
57; CHECK:       # %bb.0:
58; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %eax
59; CHECK-NEXT:    movl (%eax), %eax
60; CHECK-NEXT:    shrl %eax
61; CHECK-NEXT:    movzbl %al, %eax
62; CHECK-NEXT:    movd %eax, %xmm0
63; CHECK-NEXT:    retl
64
65  %x2 = load i32, ptr %x1
66  %x3 = lshr i32 %x2, 1
67  %x = trunc i32 %x3 to i8
68  %r = insertelement <16 x i8> zeroinitializer, i8 %x, i32 0
69  ret <16 x i8> %r
70}
71
72