1*9880d681SAndroid Build Coastguard Worker# RUN: llc -o - %s -start-after=if-converter | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker--- | 4*9880d681SAndroid Build Coastguard Worker target datalayout = "E-m:e-i64:64-n32:64" 5*9880d681SAndroid Build Coastguard Worker target triple = "powerpc64-unknown-linux-gnu" 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Worker %struct.rwlock_t.0.22.58.68.242.244 = type {} 8*9880d681SAndroid Build Coastguard Worker 9*9880d681SAndroid Build Coastguard Worker @tasklist_lock = external global %struct.rwlock_t.0.22.58.68.242.244, align 1 10*9880d681SAndroid Build Coastguard Worker 11*9880d681SAndroid Build Coastguard Worker ; Function Attrs: nounwind 12*9880d681SAndroid Build Coastguard Worker define void @mm_update_next_owner(i8** %p1, i32* %p2) #0 { 13*9880d681SAndroid Build Coastguard Worker entry: 14*9880d681SAndroid Build Coastguard Worker %0 = load i8*, i8** %p1, align 8 15*9880d681SAndroid Build Coastguard Worker br i1 undef, label %do.body.92, label %for.body.21 16*9880d681SAndroid Build Coastguard Worker 17*9880d681SAndroid Build Coastguard Worker for.body.21: ; preds = %entry 18*9880d681SAndroid Build Coastguard Worker unreachable 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Worker do.body.92: ; preds = %entry 21*9880d681SAndroid Build Coastguard Worker %usage = getelementptr inbounds i8, i8* %0, i64 -48 22*9880d681SAndroid Build Coastguard Worker %counter.i = bitcast i8* %usage to i32* 23*9880d681SAndroid Build Coastguard Worker %call95 = tail call signext i32 bitcast (i32 (...)* @__raw_read_unlock to i32 (%struct.rwlock_t.0.22.58.68.242.244*)*)(%struct.rwlock_t.0.22.58.68.242.244* nonnull @tasklist_lock) #1 24*9880d681SAndroid Build Coastguard Worker store volatile i32 0, i32* %p2, align 4 25*9880d681SAndroid Build Coastguard Worker tail call void asm sideeffect "#compiler barrier", "~{memory}"() #1 26*9880d681SAndroid Build Coastguard Worker %1 = tail call i32 asm sideeffect "\0Alwsync \0A1:\09lwarx\09$0,0,$1\09\09# atomic_dec_return\0A\09addic\09$0,$0,-1\0A\09stwcx.\09$0,0,$1\0A\09bne-\091b\0Async \0A", "=&r,r,~{cc},~{xer},~{memory}"(i32* %counter.i) #1 27*9880d681SAndroid Build Coastguard Worker %cmp.i = icmp eq i32 %1, 0 28*9880d681SAndroid Build Coastguard Worker br i1 %cmp.i, label %if.then.i, label %put_task_struct.exit 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Worker if.then.i: ; preds = %do.body.92 31*9880d681SAndroid Build Coastguard Worker unreachable 32*9880d681SAndroid Build Coastguard Worker 33*9880d681SAndroid Build Coastguard Worker put_task_struct.exit: ; preds = %do.body.92 34*9880d681SAndroid Build Coastguard Worker ret void 35*9880d681SAndroid Build Coastguard Worker } 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Worker declare signext i32 @__raw_read_unlock(...) 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Worker attributes #0 = { nounwind "target-cpu"="pwr7" } 40*9880d681SAndroid Build Coastguard Worker attributes #1 = { nounwind } 41*9880d681SAndroid Build Coastguard Worker 42*9880d681SAndroid Build Coastguard Worker... 43*9880d681SAndroid Build Coastguard Worker--- 44*9880d681SAndroid Build Coastguard Workername: mm_update_next_owner 45*9880d681SAndroid Build Coastguard Workeralignment: 4 46*9880d681SAndroid Build Coastguard WorkerexposesReturnsTwice: false 47*9880d681SAndroid Build Coastguard WorkerhasInlineAsm: true 48*9880d681SAndroid Build Coastguard WorkerallVRegsAllocated: true 49*9880d681SAndroid Build Coastguard WorkerisSSA: false 50*9880d681SAndroid Build Coastguard WorkertracksRegLiveness: true 51*9880d681SAndroid Build Coastguard WorkertracksSubRegLiveness: false 52*9880d681SAndroid Build Coastguard Workerliveins: 53*9880d681SAndroid Build Coastguard Worker - { reg: '%x3' } 54*9880d681SAndroid Build Coastguard Worker - { reg: '%x4' } 55*9880d681SAndroid Build Coastguard WorkercalleeSavedRegisters: [ '%cr2', '%cr3', '%cr4', '%f14', '%f15', '%f16', 56*9880d681SAndroid Build Coastguard Worker '%f17', '%f18', '%f19', '%f20', '%f21', '%f22', 57*9880d681SAndroid Build Coastguard Worker '%f23', '%f24', '%f25', '%f26', '%f27', '%f28', 58*9880d681SAndroid Build Coastguard Worker '%f29', '%f30', '%f31', '%r14', '%r15', '%r16', 59*9880d681SAndroid Build Coastguard Worker '%r17', '%r18', '%r19', '%r20', '%r21', '%r22', 60*9880d681SAndroid Build Coastguard Worker '%r23', '%r24', '%r25', '%r26', '%r27', '%r28', 61*9880d681SAndroid Build Coastguard Worker '%r29', '%r30', '%r31', '%v20', '%v21', '%v22', 62*9880d681SAndroid Build Coastguard Worker '%v23', '%v24', '%v25', '%v26', '%v27', '%v28', 63*9880d681SAndroid Build Coastguard Worker '%v29', '%v30', '%v31', '%vf20', '%vf21', '%vf22', 64*9880d681SAndroid Build Coastguard Worker '%vf23', '%vf24', '%vf25', '%vf26', '%vf27', '%vf28', 65*9880d681SAndroid Build Coastguard Worker '%vf29', '%vf30', '%vf31', '%x14', '%x15', '%x16', 66*9880d681SAndroid Build Coastguard Worker '%x17', '%x18', '%x19', '%x20', '%x21', '%x22', 67*9880d681SAndroid Build Coastguard Worker '%x23', '%x24', '%x25', '%x26', '%x27', '%x28', 68*9880d681SAndroid Build Coastguard Worker '%x29', '%x30', '%x31', '%cr2eq', '%cr3eq', '%cr4eq', 69*9880d681SAndroid Build Coastguard Worker '%cr2gt', '%cr3gt', '%cr4gt', '%cr2lt', '%cr3lt', 70*9880d681SAndroid Build Coastguard Worker '%cr4lt', '%cr2un', '%cr3un', '%cr4un' ] 71*9880d681SAndroid Build Coastguard WorkerframeInfo: 72*9880d681SAndroid Build Coastguard Worker isFrameAddressTaken: false 73*9880d681SAndroid Build Coastguard Worker isReturnAddressTaken: false 74*9880d681SAndroid Build Coastguard Worker hasStackMap: false 75*9880d681SAndroid Build Coastguard Worker hasPatchPoint: false 76*9880d681SAndroid Build Coastguard Worker stackSize: 144 77*9880d681SAndroid Build Coastguard Worker offsetAdjustment: 0 78*9880d681SAndroid Build Coastguard Worker maxAlignment: 0 79*9880d681SAndroid Build Coastguard Worker adjustsStack: true 80*9880d681SAndroid Build Coastguard Worker hasCalls: true 81*9880d681SAndroid Build Coastguard Worker maxCallFrameSize: 112 82*9880d681SAndroid Build Coastguard Worker hasOpaqueSPAdjustment: false 83*9880d681SAndroid Build Coastguard Worker hasVAStart: false 84*9880d681SAndroid Build Coastguard Worker hasMustTailInVarArgFunc: false 85*9880d681SAndroid Build Coastguard WorkerfixedStack: 86*9880d681SAndroid Build Coastguard Worker - { id: 0, type: spill-slot, offset: -16, size: 8, alignment: 16, callee-saved-register: '%x30' } 87*9880d681SAndroid Build Coastguard Worker - { id: 1, type: spill-slot, offset: -24, size: 8, alignment: 8, callee-saved-register: '%x29' } 88*9880d681SAndroid Build Coastguard Workerbody: | 89*9880d681SAndroid Build Coastguard Worker bb.0.entry: 90*9880d681SAndroid Build Coastguard Worker liveins: %x3, %x4, %x29, %x30, %x29, %x30 91*9880d681SAndroid Build Coastguard Worker 92*9880d681SAndroid Build Coastguard Worker %x0 = MFLR8 implicit %lr8 93*9880d681SAndroid Build Coastguard Worker STD %x0, 16, %x1 94*9880d681SAndroid Build Coastguard Worker %x1 = STDU %x1, -144, %x1 95*9880d681SAndroid Build Coastguard Worker STD killed %x29, 120, %x1 :: (store 8 into %fixed-stack.1) 96*9880d681SAndroid Build Coastguard Worker STD killed %x30, 128, %x1 :: (store 8 into %fixed-stack.0, align 16) 97*9880d681SAndroid Build Coastguard Worker %x30 = OR8 %x4, %x4 98*9880d681SAndroid Build Coastguard Worker %x3 = LD 0, killed %x3 :: (load 8 from %ir.p1) 99*9880d681SAndroid Build Coastguard Worker %x29 = ADDI8 killed %x3, -48 100*9880d681SAndroid Build Coastguard Worker %x3 = ADDIStocHA %x2, @tasklist_lock 101*9880d681SAndroid Build Coastguard Worker %x3 = LDtocL @tasklist_lock, killed %x3, implicit %x2 :: (load 8 from got) 102*9880d681SAndroid Build Coastguard Worker BL8_NOP @__raw_read_unlock, csr_svr464_altivec, implicit-def %lr8, implicit %rm, implicit %x3, implicit %x2, implicit-def %r1, implicit-def dead %x3 103*9880d681SAndroid Build Coastguard Worker %r3 = LI 0 104*9880d681SAndroid Build Coastguard Worker STW killed %r3, 0, killed %x30 :: (volatile store 4 into %ir.p2) 105*9880d681SAndroid Build Coastguard Worker INLINEASM $"#compiler barrier", 25 106*9880d681SAndroid Build Coastguard Worker INLINEASM $"\0Alwsync \0A1:\09lwarx\09$0,0,$1\09\09# atomic_dec_return\0A\09addic\09$0,$0,-1\0A\09stwcx.\09$0,0,$1\0A\09bne-\091b\0Async \0A", 25, 131083, def early-clobber %r3, 851977, killed %x29, 12, implicit-def dead early-clobber %cr0 107*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: @mm_update_next_owner 108*9880d681SAndroid Build Coastguard Worker ; CHECK-NOT: lwarx 29, 0, 29 109*9880d681SAndroid Build Coastguard Worker ; CHECK-NOT: stwcx. 29, 0, 29 110*9880d681SAndroid Build Coastguard Worker %cr0 = CMPLWI killed %r3, 0 111*9880d681SAndroid Build Coastguard Worker %x30 = LD 128, %x1 :: (load 8 from %fixed-stack.0, align 16) 112*9880d681SAndroid Build Coastguard Worker %x29 = LD 120, %x1 :: (load 8 from %fixed-stack.1) 113*9880d681SAndroid Build Coastguard Worker %x1 = ADDI8 %x1, 144 114*9880d681SAndroid Build Coastguard Worker %x0 = LD 16, %x1 115*9880d681SAndroid Build Coastguard Worker MTLR8 %x0, implicit-def %lr8 116*9880d681SAndroid Build Coastguard Worker BLR8 implicit %lr8, implicit %rm 117*9880d681SAndroid Build Coastguard Worker 118*9880d681SAndroid Build Coastguard Worker... 119