xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/avx512-bugfix-23634.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=x86-64 -mtriple=x86_64-apple-darwin -mcpu=knl | FileCheck %s
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
5*9880d681SAndroid Build Coastguard Workertarget triple = "x86_64-unknown-linux-gnu"
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Workerdefine void @f_fu(float* %ret, float*  %aa, float %b) {
8*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f_fu:
9*9880d681SAndroid Build Coastguard Worker; CHECK:       ## BB#0: ## %allocas
10*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vcvttss2si %xmm0, %eax
11*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpbroadcastd %eax, %zmm0
12*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vcvttps2dq (%rsi), %zmm1
13*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsrld $31, %zmm0, %zmm2
14*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddd %zmm2, %zmm0, %zmm2
15*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpsrad $1, %zmm2, %zmm2
16*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    movw $-21846, %ax ## imm = 0xAAAA
17*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    kmovw %eax, %k1
18*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpblendmd {{.*}}(%rip), %zmm1, %zmm1 {%k1}
19*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddd %zmm0, %zmm2, %zmm0
20*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vpaddd %zmm1, %zmm0, %zmm0
21*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vcvtdq2ps %zmm0, %zmm0
22*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    vmovups %zmm0, (%rdi)
23*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    retq
24*9880d681SAndroid Build Coastguard Workerallocas:
25*9880d681SAndroid Build Coastguard Worker  %ptr_cast_for_load = bitcast float* %aa to <16 x float>*
26*9880d681SAndroid Build Coastguard Worker  %ptr_masked_load.39 = load <16 x float>, <16 x float>* %ptr_cast_for_load, align 4
27*9880d681SAndroid Build Coastguard Worker  %b_load_to_int32 = fptosi float %b to i32
28*9880d681SAndroid Build Coastguard Worker  %b_load_to_int32_broadcast_init = insertelement <16 x i32> undef, i32 %b_load_to_int32, i32 0
29*9880d681SAndroid Build Coastguard Worker  %b_load_to_int32_broadcast = shufflevector <16 x i32> %b_load_to_int32_broadcast_init, <16 x i32> undef, <16 x i32> zeroinitializer
30*9880d681SAndroid Build Coastguard Worker  %b_to_int32 = fptosi float %b to i32
31*9880d681SAndroid Build Coastguard Worker  %b_to_int32_broadcast_init = insertelement <16 x i32> undef, i32 %b_to_int32, i32 0
32*9880d681SAndroid Build Coastguard Worker  %b_to_int32_broadcast = shufflevector <16 x i32> %b_to_int32_broadcast_init, <16 x i32> undef, <16 x i32> zeroinitializer
33*9880d681SAndroid Build Coastguard Worker
34*9880d681SAndroid Build Coastguard Worker  %a_load_to_int32 = fptosi <16 x float> %ptr_masked_load.39 to <16 x i32>
35*9880d681SAndroid Build Coastguard Worker  %div_v019_load_ = sdiv <16 x i32> %b_to_int32_broadcast, <i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2>
36*9880d681SAndroid Build Coastguard Worker
37*9880d681SAndroid Build Coastguard Worker  %v1.i = select <16 x i1> <i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true>, <16 x i32> <i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17>, <16 x i32> %a_load_to_int32
38*9880d681SAndroid Build Coastguard Worker
39*9880d681SAndroid Build Coastguard Worker  %foo_test = add <16 x i32> %div_v019_load_, %b_load_to_int32_broadcast
40*9880d681SAndroid Build Coastguard Worker
41*9880d681SAndroid Build Coastguard Worker
42*9880d681SAndroid Build Coastguard Worker  %add_struct_offset_y_struct_offset33_x = add <16 x i32> %foo_test, %v1.i
43*9880d681SAndroid Build Coastguard Worker
44*9880d681SAndroid Build Coastguard Worker  %val = sitofp <16 x i32> %add_struct_offset_y_struct_offset33_x to <16 x float>
45*9880d681SAndroid Build Coastguard Worker  %ptrcast = bitcast float* %ret to <16 x float>*
46*9880d681SAndroid Build Coastguard Worker  store <16 x float> %val, <16 x float>* %ptrcast, align 4
47*9880d681SAndroid Build Coastguard Worker  ret void
48*9880d681SAndroid Build Coastguard Worker}
49