xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/atomic-dagsched.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=x86-64 -mcpu=corei7 -verify-machineinstrs | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Workerdefine void @test(i8** %a, i64* %b, i64 %c, i64 %d) nounwind {
4*9880d681SAndroid Build Coastguard Workerentry:
5*9880d681SAndroid Build Coastguard Worker  %ptrtoarg4 = load i8*, i8** %a, align 8
6*9880d681SAndroid Build Coastguard Worker  %brglist1 = getelementptr i8*, i8** %a, i64 1
7*9880d681SAndroid Build Coastguard Worker  %ptrtoarg25 = load i8*, i8** %brglist1, align 8
8*9880d681SAndroid Build Coastguard Worker  %0 = load i64, i64* %b, align 8
9*9880d681SAndroid Build Coastguard Worker  %1 = mul i64 %0, 4
10*9880d681SAndroid Build Coastguard Worker  %scevgep = getelementptr i8, i8* %ptrtoarg25, i64 %1
11*9880d681SAndroid Build Coastguard Worker  %2 = mul i64 %d, 4
12*9880d681SAndroid Build Coastguard Worker  br label %loop.cond
13*9880d681SAndroid Build Coastguard Worker
14*9880d681SAndroid Build Coastguard Workerloop.cond:                                        ; preds = %test.exit, %entry
15*9880d681SAndroid Build Coastguard Worker  %asr.iv6 = phi i8* [ %29, %test.exit ], [ %scevgep, %entry ]
16*9880d681SAndroid Build Coastguard Worker  %iv = phi i64 [ %0, %entry ], [ %28, %test.exit ]
17*9880d681SAndroid Build Coastguard Worker  %3 = icmp eq i64 %iv, %c
18*9880d681SAndroid Build Coastguard Worker  br i1 %3, label %return, label %loop
19*9880d681SAndroid Build Coastguard Worker
20*9880d681SAndroid Build Coastguard Workerloop:                                             ; preds = %loop.cond
21*9880d681SAndroid Build Coastguard Worker  %4 = load i64*, i64* addrspace(256)* inttoptr (i64 264 to i64* addrspace(256)*), align 8
22*9880d681SAndroid Build Coastguard Worker  %5 = load i64, i64* %4, align 8
23*9880d681SAndroid Build Coastguard Worker  %vector.size.i = ashr i64 %5, 3
24*9880d681SAndroid Build Coastguard Worker  %num.vector.wi.i = shl i64 %vector.size.i, 3
25*9880d681SAndroid Build Coastguard Worker  %6 = icmp eq i64 %vector.size.i, 0
26*9880d681SAndroid Build Coastguard Worker  br i1 %6, label %scalarIf.i, label %dim_0_vector_pre_head.i
27*9880d681SAndroid Build Coastguard Worker
28*9880d681SAndroid Build Coastguard Workerdim_0_vector_pre_head.i:                          ; preds = %loop
29*9880d681SAndroid Build Coastguard Worker  %7 = trunc i64 %5 to i32
30*9880d681SAndroid Build Coastguard Worker  %tempvector_func.i = insertelement <8 x i32> undef, i32 %7, i32 0
31*9880d681SAndroid Build Coastguard Worker  %vectorvector_func.i = shufflevector <8 x i32> %tempvector_func.i, <8 x i32> undef, <8 x i32> zeroinitializer
32*9880d681SAndroid Build Coastguard Worker  br label %vector_kernel_entry.i
33*9880d681SAndroid Build Coastguard Worker
34*9880d681SAndroid Build Coastguard Workervector_kernel_entry.i:                            ; preds = %vector_kernel_entry.i, %dim_0_vector_pre_head.i
35*9880d681SAndroid Build Coastguard Worker  %asr.iv9 = phi i8* [ %scevgep10, %vector_kernel_entry.i ], [ %asr.iv6, %dim_0_vector_pre_head.i ]
36*9880d681SAndroid Build Coastguard Worker  %asr.iv = phi i64 [ %asr.iv.next, %vector_kernel_entry.i ], [ %vector.size.i, %dim_0_vector_pre_head.i ]
37*9880d681SAndroid Build Coastguard Worker  %8 = addrspacecast i8* %ptrtoarg4 to i32 addrspace(1)*
38*9880d681SAndroid Build Coastguard Worker  %asr.iv911 = addrspacecast i8* %asr.iv9 to <8 x i32> addrspace(1)*
39*9880d681SAndroid Build Coastguard Worker  %9 = load <8 x i32>, <8 x i32> addrspace(1)* %asr.iv911, align 4
40*9880d681SAndroid Build Coastguard Worker  %extract8vector_func.i = extractelement <8 x i32> %9, i32 0
41*9880d681SAndroid Build Coastguard Worker  %extract9vector_func.i = extractelement <8 x i32> %9, i32 1
42*9880d681SAndroid Build Coastguard Worker  %extract10vector_func.i = extractelement <8 x i32> %9, i32 2
43*9880d681SAndroid Build Coastguard Worker  %extract11vector_func.i = extractelement <8 x i32> %9, i32 3
44*9880d681SAndroid Build Coastguard Worker  %extract12vector_func.i = extractelement <8 x i32> %9, i32 4
45*9880d681SAndroid Build Coastguard Worker  %extract13vector_func.i = extractelement <8 x i32> %9, i32 5
46*9880d681SAndroid Build Coastguard Worker  %extract14vector_func.i = extractelement <8 x i32> %9, i32 6
47*9880d681SAndroid Build Coastguard Worker  %extract15vector_func.i = extractelement <8 x i32> %9, i32 7
48*9880d681SAndroid Build Coastguard Worker  %10 = atomicrmw min i32 addrspace(1)* %8, i32 %extract8vector_func.i seq_cst
49*9880d681SAndroid Build Coastguard Worker  %11 = atomicrmw min i32 addrspace(1)* %8, i32 %extract9vector_func.i seq_cst
50*9880d681SAndroid Build Coastguard Worker  %12 = atomicrmw min i32 addrspace(1)* %8, i32 %extract10vector_func.i seq_cst
51*9880d681SAndroid Build Coastguard Worker  %13 = atomicrmw min i32 addrspace(1)* %8, i32 %extract11vector_func.i seq_cst
52*9880d681SAndroid Build Coastguard Worker  %14 = atomicrmw min i32 addrspace(1)* %8, i32 %extract12vector_func.i seq_cst
53*9880d681SAndroid Build Coastguard Worker  %15 = atomicrmw min i32 addrspace(1)* %8, i32 %extract13vector_func.i seq_cst
54*9880d681SAndroid Build Coastguard Worker  %16 = atomicrmw min i32 addrspace(1)* %8, i32 %extract14vector_func.i seq_cst
55*9880d681SAndroid Build Coastguard Worker  %17 = atomicrmw min i32 addrspace(1)* %8, i32 %extract15vector_func.i seq_cst
56*9880d681SAndroid Build Coastguard Worker  store <8 x i32> %vectorvector_func.i, <8 x i32> addrspace(1)* %asr.iv911, align 4
57*9880d681SAndroid Build Coastguard Worker  %asr.iv.next = add i64 %asr.iv, -1
58*9880d681SAndroid Build Coastguard Worker  %scevgep10 = getelementptr i8, i8* %asr.iv9, i64 32
59*9880d681SAndroid Build Coastguard Worker  %dim_0_vector_cmp.to.max.i = icmp eq i64 %asr.iv.next, 0
60*9880d681SAndroid Build Coastguard Worker  br i1 %dim_0_vector_cmp.to.max.i, label %scalarIf.i, label %vector_kernel_entry.i
61*9880d681SAndroid Build Coastguard Worker
62*9880d681SAndroid Build Coastguard WorkerscalarIf.i:                                       ; preds = %vector_kernel_entry.i, %loop
63*9880d681SAndroid Build Coastguard Worker  %exec_wi.i = phi i64 [ 0, %loop ], [ %num.vector.wi.i, %vector_kernel_entry.i ]
64*9880d681SAndroid Build Coastguard Worker  %18 = icmp eq i64 %exec_wi.i, %5
65*9880d681SAndroid Build Coastguard Worker  br i1 %18, label %test.exit, label %dim_0_pre_head.i
66*9880d681SAndroid Build Coastguard Worker
67*9880d681SAndroid Build Coastguard Workerdim_0_pre_head.i:                                 ; preds = %scalarIf.i
68*9880d681SAndroid Build Coastguard Worker  %19 = load i64*, i64* addrspace(256)* inttoptr (i64 264 to i64* addrspace(256)*), align 8
69*9880d681SAndroid Build Coastguard Worker  %20 = load i64, i64* %19, align 8
70*9880d681SAndroid Build Coastguard Worker  %21 = trunc i64 %20 to i32
71*9880d681SAndroid Build Coastguard Worker  %22 = mul i64 %vector.size.i, 8
72*9880d681SAndroid Build Coastguard Worker  br label %scalar_kernel_entry.i
73*9880d681SAndroid Build Coastguard Worker
74*9880d681SAndroid Build Coastguard Workerscalar_kernel_entry.i:                            ; preds = %scalar_kernel_entry.i, %dim_0_pre_head.i
75*9880d681SAndroid Build Coastguard Worker  %asr.iv12 = phi i64 [ %asr.iv.next13, %scalar_kernel_entry.i ], [ %22, %dim_0_pre_head.i ]
76*9880d681SAndroid Build Coastguard Worker  %23 = addrspacecast i8* %asr.iv6 to i32 addrspace(1)*
77*9880d681SAndroid Build Coastguard Worker  %24 = addrspacecast i8* %ptrtoarg4 to i32 addrspace(1)*
78*9880d681SAndroid Build Coastguard Worker  %scevgep16 = getelementptr i32, i32 addrspace(1)* %23, i64 %asr.iv12
79*9880d681SAndroid Build Coastguard Worker  %25 = load i32, i32 addrspace(1)* %scevgep16, align 4
80*9880d681SAndroid Build Coastguard Worker  %26 = atomicrmw min i32 addrspace(1)* %24, i32 %25 seq_cst
81*9880d681SAndroid Build Coastguard Worker  %scevgep15 = getelementptr i32, i32 addrspace(1)* %23, i64 %asr.iv12
82*9880d681SAndroid Build Coastguard Worker  store i32 %21, i32 addrspace(1)* %scevgep15, align 4
83*9880d681SAndroid Build Coastguard Worker  %asr.iv.next13 = add i64 %asr.iv12, 1
84*9880d681SAndroid Build Coastguard Worker  %dim_0_cmp.to.max.i = icmp eq i64 %5, %asr.iv.next13
85*9880d681SAndroid Build Coastguard Worker  br i1 %dim_0_cmp.to.max.i, label %test.exit, label %scalar_kernel_entry.i
86*9880d681SAndroid Build Coastguard Worker
87*9880d681SAndroid Build Coastguard Workertest.exit:                     ; preds = %scalar_kernel_entry.i, %scalarIf.i
88*9880d681SAndroid Build Coastguard Worker  %27 = bitcast i8* %asr.iv6 to i1*
89*9880d681SAndroid Build Coastguard Worker  %28 = add i64 %iv, %d
90*9880d681SAndroid Build Coastguard Worker  store i64 %28, i64* %b, align 8
91*9880d681SAndroid Build Coastguard Worker  %scevgep8 = getelementptr i1, i1* %27, i64 %2
92*9880d681SAndroid Build Coastguard Worker  %29 = bitcast i1* %scevgep8 to i8*
93*9880d681SAndroid Build Coastguard Worker  br label %loop.cond
94*9880d681SAndroid Build Coastguard Worker
95*9880d681SAndroid Build Coastguard Workerreturn:                                           ; preds = %loop.cond
96*9880d681SAndroid Build Coastguard Worker  store i64 %0, i64* %b, align 8
97*9880d681SAndroid Build Coastguard Worker  ret void
98*9880d681SAndroid Build Coastguard Worker}
99*9880d681SAndroid Build Coastguard Worker
100*9880d681SAndroid Build Coastguard Worker; CHECK: test
101*9880d681SAndroid Build Coastguard Worker; CHECK: decq
102*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: cmpxchgl
103*9880d681SAndroid Build Coastguard Worker; CHECK: jne
104*9880d681SAndroid Build Coastguard Worker; CHECK: ret
105