xref: /llvm-project/llvm/test/CodeGen/X86/legalize-vec-assertzext.ll (revision ae71609e91ec9f38df7e92ba3c50a1f9cebb772e)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx512f | FileCheck %s
3
4define i64 @split_assertzext(ptr %x) nounwind {
5; CHECK-LABEL: split_assertzext:
6; CHECK:       # %bb.0:
7; CHECK-NEXT:    pushq %rax
8; CHECK-NEXT:    callq test@PLT
9; CHECK-NEXT:    vextracti32x4 $3, %zmm1, %xmm0
10; CHECK-NEXT:    vpextrq $1, %xmm0, %rax
11; CHECK-NEXT:    popq %rcx
12; CHECK-NEXT:    vzeroupper
13; CHECK-NEXT:    retq
14  %e = call <16 x i64> @test(), !range !0, !noundef !{}
15  %d = extractelement <16 x i64> %e, i32 15
16  ret i64 %d
17}
18
19define i64 @widen_assertzext(ptr %x) nounwind {
20; CHECK-LABEL: widen_assertzext:
21; CHECK:       # %bb.0:
22; CHECK-NEXT:    pushq %rax
23; CHECK-NEXT:    callq test2@PLT
24; CHECK-NEXT:    movb $127, %al
25; CHECK-NEXT:    kmovw %eax, %k1
26; CHECK-NEXT:    vpexpandq %zmm0, %zmm0 {%k1} {z}
27; CHECK-NEXT:    vextracti32x4 $3, %zmm0, %xmm0
28; CHECK-NEXT:    vmovq %xmm0, %rax
29; CHECK-NEXT:    popq %rcx
30; CHECK-NEXT:    vzeroupper
31; CHECK-NEXT:    retq
32  %e = call <7 x i64> @test2(), !range !0, !noundef !{}
33  %d = extractelement <7 x i64> %e, i32 6
34  ret i64 %d
35}
36
37define i64 @widen_assertzext_range_attr(ptr %x) nounwind {
38; CHECK-LABEL: widen_assertzext_range_attr:
39; CHECK:       # %bb.0:
40; CHECK-NEXT:    pushq %rax
41; CHECK-NEXT:    callq test2@PLT
42; CHECK-NEXT:    movb $127, %al
43; CHECK-NEXT:    kmovw %eax, %k1
44; CHECK-NEXT:    vpexpandq %zmm0, %zmm0 {%k1} {z}
45; CHECK-NEXT:    vextracti32x4 $3, %zmm0, %xmm0
46; CHECK-NEXT:    vmovq %xmm0, %rax
47; CHECK-NEXT:    popq %rcx
48; CHECK-NEXT:    vzeroupper
49; CHECK-NEXT:    retq
50  %e = call noundef range(i64 0, 2) <7 x i64> @test2()
51  %d = extractelement <7 x i64> %e, i32 6
52  ret i64 %d
53}
54
55declare  <16 x i64> @test()
56declare  <7 x i64> @test2()
57!0 = !{ i64 0, i64 2 }
58