1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mcpu=pwr7 < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Workertarget datalayout = "E-m:e-i64:64-n32:64" 3*9880d681SAndroid Build Coastguard Workertarget triple = "powerpc64-unknown-linux-gnu" 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind 6*9880d681SAndroid Build Coastguard Workerdefine void @jbd2_journal_commit_transaction(i32* %journal, i64 %inp1, i32 %inp2, 7*9880d681SAndroid Build Coastguard Worker i32* %inp3, i32** %inp4, 8*9880d681SAndroid Build Coastguard Worker i32** %inp5, i1 %inp6, 9*9880d681SAndroid Build Coastguard Worker i1 %inp7, i1 %inp8) #0 { 10*9880d681SAndroid Build Coastguard Workerentry: 11*9880d681SAndroid Build Coastguard Worker br i1 undef, label %do.body, label %if.then5 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Workerif.then5: ; preds = %entry 14*9880d681SAndroid Build Coastguard Worker unreachable 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Workerdo.body: ; preds = %entry 17*9880d681SAndroid Build Coastguard Worker br i1 undef, label %do.body.i, label %trace_jbd2_start_commit.exit 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Workerdo.body.i: ; preds = %do.body 20*9880d681SAndroid Build Coastguard Worker unreachable 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Workertrace_jbd2_start_commit.exit: ; preds = %do.body 23*9880d681SAndroid Build Coastguard Worker br i1 undef, label %do.body.i1116, label %trace_jbd2_commit_locking.exit 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Workerdo.body.i1116: ; preds = %trace_jbd2_start_commit.exit 26*9880d681SAndroid Build Coastguard Worker br i1 undef, label %if.end.i1123, label %do.body5.i1122 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Workerdo.body5.i1122: ; preds = %do.body.i1116 29*9880d681SAndroid Build Coastguard Worker unreachable 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Workerif.end.i1123: ; preds = %do.body.i1116 32*9880d681SAndroid Build Coastguard Worker br label %trace_jbd2_commit_locking.exit 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Workertrace_jbd2_commit_locking.exit: ; preds = %if.end.i1123, %trace_jbd2_start_commit.exit 35*9880d681SAndroid Build Coastguard Worker br i1 undef, label %spin_unlock.exit1146, label %if.then.i.i.i.i1144 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Workerif.then.i.i.i.i1144: ; preds = %trace_jbd2_commit_locking.exit 38*9880d681SAndroid Build Coastguard Worker unreachable 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Workerspin_unlock.exit1146: ; preds = %trace_jbd2_commit_locking.exit 41*9880d681SAndroid Build Coastguard Worker br i1 undef, label %spin_unlock.exit1154, label %if.then.i.i.i.i1152 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Workerif.then.i.i.i.i1152: ; preds = %spin_unlock.exit1146 44*9880d681SAndroid Build Coastguard Worker br label %spin_unlock.exit1154 45*9880d681SAndroid Build Coastguard Worker 46*9880d681SAndroid Build Coastguard Workerspin_unlock.exit1154: ; preds = %if.then.i.i.i.i1152, %spin_unlock.exit1146 47*9880d681SAndroid Build Coastguard Worker br i1 undef, label %do.body.i1159, label %trace_jbd2_commit_flushing.exit 48*9880d681SAndroid Build Coastguard Worker 49*9880d681SAndroid Build Coastguard Workerdo.body.i1159: ; preds = %spin_unlock.exit1154 50*9880d681SAndroid Build Coastguard Worker unreachable 51*9880d681SAndroid Build Coastguard Worker 52*9880d681SAndroid Build Coastguard Workertrace_jbd2_commit_flushing.exit: ; preds = %spin_unlock.exit1154 53*9880d681SAndroid Build Coastguard Worker br i1 undef, label %for.end.i, label %for.body.lr.ph.i 54*9880d681SAndroid Build Coastguard Worker 55*9880d681SAndroid Build Coastguard Workerfor.body.lr.ph.i: ; preds = %trace_jbd2_commit_flushing.exit 56*9880d681SAndroid Build Coastguard Worker br i1 undef, label %spin_unlock.exit.i, label %if.then.i.i.i.i.i 57*9880d681SAndroid Build Coastguard Worker 58*9880d681SAndroid Build Coastguard Workerif.then.i.i.i.i.i: ; preds = %for.body.lr.ph.i 59*9880d681SAndroid Build Coastguard Worker unreachable 60*9880d681SAndroid Build Coastguard Worker 61*9880d681SAndroid Build Coastguard Workerspin_unlock.exit.i: ; preds = %for.body.lr.ph.i 62*9880d681SAndroid Build Coastguard Worker unreachable 63*9880d681SAndroid Build Coastguard Worker 64*9880d681SAndroid Build Coastguard Workerfor.end.i: ; preds = %trace_jbd2_commit_flushing.exit 65*9880d681SAndroid Build Coastguard Worker br i1 undef, label %journal_submit_data_buffers.exit, label %if.then.i.i.i.i31.i 66*9880d681SAndroid Build Coastguard Worker 67*9880d681SAndroid Build Coastguard Workerif.then.i.i.i.i31.i: ; preds = %for.end.i 68*9880d681SAndroid Build Coastguard Worker unreachable 69*9880d681SAndroid Build Coastguard Worker 70*9880d681SAndroid Build Coastguard Workerjournal_submit_data_buffers.exit: ; preds = %for.end.i 71*9880d681SAndroid Build Coastguard Worker br i1 undef, label %if.end103, label %if.then102 72*9880d681SAndroid Build Coastguard Worker 73*9880d681SAndroid Build Coastguard Workerif.then102: ; preds = %journal_submit_data_buffers.exit 74*9880d681SAndroid Build Coastguard Worker unreachable 75*9880d681SAndroid Build Coastguard Worker 76*9880d681SAndroid Build Coastguard Workerif.end103: ; preds = %journal_submit_data_buffers.exit 77*9880d681SAndroid Build Coastguard Worker br i1 undef, label %do.body.i1182, label %trace_jbd2_commit_logging.exit 78*9880d681SAndroid Build Coastguard Worker 79*9880d681SAndroid Build Coastguard Workerdo.body.i1182: ; preds = %if.end103 80*9880d681SAndroid Build Coastguard Worker unreachable 81*9880d681SAndroid Build Coastguard Worker 82*9880d681SAndroid Build Coastguard Workertrace_jbd2_commit_logging.exit: ; preds = %if.end103 83*9880d681SAndroid Build Coastguard Worker br i1 undef, label %for.end.i1287, label %for.body.i1277 84*9880d681SAndroid Build Coastguard Worker 85*9880d681SAndroid Build Coastguard Workerfor.body.i1277: ; preds = %trace_jbd2_commit_logging.exit 86*9880d681SAndroid Build Coastguard Worker unreachable 87*9880d681SAndroid Build Coastguard Worker 88*9880d681SAndroid Build Coastguard Workerfor.end.i1287: ; preds = %trace_jbd2_commit_logging.exit 89*9880d681SAndroid Build Coastguard Worker br i1 undef, label %journal_finish_inode_data_buffers.exit, label %if.then.i.i.i.i84.i 90*9880d681SAndroid Build Coastguard Worker 91*9880d681SAndroid Build Coastguard Workerif.then.i.i.i.i84.i: ; preds = %for.end.i1287 92*9880d681SAndroid Build Coastguard Worker unreachable 93*9880d681SAndroid Build Coastguard Worker 94*9880d681SAndroid Build Coastguard Workerjournal_finish_inode_data_buffers.exit: ; preds = %for.end.i1287 95*9880d681SAndroid Build Coastguard Worker br i1 undef, label %if.end256, label %if.then249 96*9880d681SAndroid Build Coastguard Worker 97*9880d681SAndroid Build Coastguard Workerif.then249: ; preds = %journal_finish_inode_data_buffers.exit 98*9880d681SAndroid Build Coastguard Worker unreachable 99*9880d681SAndroid Build Coastguard Worker 100*9880d681SAndroid Build Coastguard Workerif.end256: ; preds = %journal_finish_inode_data_buffers.exit 101*9880d681SAndroid Build Coastguard Worker br i1 undef, label %do.body277, label %if.then260 102*9880d681SAndroid Build Coastguard Worker 103*9880d681SAndroid Build Coastguard Workerif.then260: ; preds = %if.end256 104*9880d681SAndroid Build Coastguard Worker br label %do.body277 105*9880d681SAndroid Build Coastguard Worker 106*9880d681SAndroid Build Coastguard Workerdo.body277: ; preds = %if.then260, %if.end256 107*9880d681SAndroid Build Coastguard Worker br label %while.body318 108*9880d681SAndroid Build Coastguard Worker 109*9880d681SAndroid Build Coastguard Workerwhile.body318: ; preds = %wait_on_buffer.exit, %do.body277 110*9880d681SAndroid Build Coastguard Worker %tobool.i1295 = icmp eq i64 %inp1, 0 111*9880d681SAndroid Build Coastguard Worker br i1 %tobool.i1295, label %wait_on_buffer.exit, label %if.then.i1296 112*9880d681SAndroid Build Coastguard Worker 113*9880d681SAndroid Build Coastguard Workerif.then.i1296: ; preds = %while.body318 114*9880d681SAndroid Build Coastguard Worker unreachable 115*9880d681SAndroid Build Coastguard Worker 116*9880d681SAndroid Build Coastguard Workerwait_on_buffer.exit: ; preds = %while.body318 117*9880d681SAndroid Build Coastguard Worker br i1 %inp6, label %do.body378, label %while.body318 118*9880d681SAndroid Build Coastguard Worker 119*9880d681SAndroid Build Coastguard Workerdo.body378: ; preds = %wait_on_buffer.exit 120*9880d681SAndroid Build Coastguard Worker br i1 %inp7, label %while.end418, label %while.body392.lr.ph 121*9880d681SAndroid Build Coastguard Worker 122*9880d681SAndroid Build Coastguard Workerwhile.body392.lr.ph: ; preds = %do.body378 123*9880d681SAndroid Build Coastguard Worker br label %while.body392 124*9880d681SAndroid Build Coastguard Worker 125*9880d681SAndroid Build Coastguard Workerwhile.body392: ; preds = %wait_on_buffer.exit1319, %while.body392.lr.ph 126*9880d681SAndroid Build Coastguard Worker %0 = load i8*, i8** undef, align 8 127*9880d681SAndroid Build Coastguard Worker %add.ptr399 = getelementptr inbounds i8, i8* %0, i64 -72 128*9880d681SAndroid Build Coastguard Worker %b_state.i.i1314 = bitcast i8* %add.ptr399 to i64* 129*9880d681SAndroid Build Coastguard Worker %tobool.i1316 = icmp eq i64 %inp1, 0 130*9880d681SAndroid Build Coastguard Worker br i1 %tobool.i1316, label %wait_on_buffer.exit1319, label %if.then.i1317 131*9880d681SAndroid Build Coastguard Worker 132*9880d681SAndroid Build Coastguard Workerif.then.i1317: ; preds = %while.body392 133*9880d681SAndroid Build Coastguard Worker unreachable 134*9880d681SAndroid Build Coastguard Worker 135*9880d681SAndroid Build Coastguard Workerwait_on_buffer.exit1319: ; preds = %while.body392 136*9880d681SAndroid Build Coastguard Worker %1 = load volatile i64, i64* %b_state.i.i1314, align 8 137*9880d681SAndroid Build Coastguard Worker %conv.i.i1322 = and i64 %1, 1 138*9880d681SAndroid Build Coastguard Worker %lnot404 = icmp eq i64 %conv.i.i1322, 0 139*9880d681SAndroid Build Coastguard Worker %.err.4 = select i1 %lnot404, i32 -5, i32 %inp2 140*9880d681SAndroid Build Coastguard Worker %2 = call i64 asm sideeffect "1:.long 0x7c0000a8 $| ((($0) & 0x1f) << 21) $| (((0) & 0x1f) << 16) $| ((($3) & 0x1f) << 11) $| (((0) & 0x1) << 0) \0Aandc $0,$0,$2\0Astdcx. $0,0,$3\0Abne- 1b\0A", "=&r,=*m,r,r,*m,~{cc},~{memory}"(i64* %b_state.i.i1314, i64 262144, i64* %b_state.i.i1314, i64* %b_state.i.i1314) #1 141*9880d681SAndroid Build Coastguard Worker %prev.i.i.i1325 = getelementptr inbounds i8, i8* %0, i64 8 142*9880d681SAndroid Build Coastguard Worker %3 = load i32*, i32** %inp4, align 8 143*9880d681SAndroid Build Coastguard Worker store i32* %3, i32** %inp5, align 8 144*9880d681SAndroid Build Coastguard Worker call void @__brelse(i32* %3) #1 145*9880d681SAndroid Build Coastguard Worker br i1 %inp8, label %while.end418, label %while.body392 146*9880d681SAndroid Build Coastguard Worker 147*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @jbd2_journal_commit_transaction 148*9880d681SAndroid Build Coastguard Worker; CHECK: andi. 149*9880d681SAndroid Build Coastguard Worker; CHECK: crmove 150*9880d681SAndroid Build Coastguard Worker; CHECK: stdcx. 151*9880d681SAndroid Build Coastguard Worker; CHECK: isel {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}, 152*9880d681SAndroid Build Coastguard Worker 153*9880d681SAndroid Build Coastguard Workerwhile.end418: ; preds = %wait_on_buffer.exit1319, %do.body378 154*9880d681SAndroid Build Coastguard Worker %err.4.lcssa = phi i32 [ %inp2, %do.body378 ], [ %.err.4, %wait_on_buffer.exit1319 ] 155*9880d681SAndroid Build Coastguard Worker br i1 %inp7, label %if.end421, label %if.then420 156*9880d681SAndroid Build Coastguard Worker 157*9880d681SAndroid Build Coastguard Workerif.then420: ; preds = %while.end418 158*9880d681SAndroid Build Coastguard Worker call void @jbd2_journal_abort(i32* %journal, i32 signext %err.4.lcssa) #1 159*9880d681SAndroid Build Coastguard Worker br label %if.end421 160*9880d681SAndroid Build Coastguard Worker 161*9880d681SAndroid Build Coastguard Workerif.end421: ; preds = %if.then420, %while.end418 162*9880d681SAndroid Build Coastguard Worker unreachable 163*9880d681SAndroid Build Coastguard Worker} 164*9880d681SAndroid Build Coastguard Worker 165*9880d681SAndroid Build Coastguard Workerdeclare void @jbd2_journal_abort(i32*, i32 signext) 166*9880d681SAndroid Build Coastguard Worker 167*9880d681SAndroid Build Coastguard Workerdeclare void @__brelse(i32*) 168*9880d681SAndroid Build Coastguard Worker 169*9880d681SAndroid Build Coastguard Workerattributes #0 = { nounwind } 170*9880d681SAndroid Build Coastguard Workerattributes #1 = { nounwind } 171*9880d681SAndroid Build Coastguard Worker 172