OLD | NEW |
1 //===- subzero/src/IceCfgNode.cpp - Basic block (node) implementation -----===// | 1 //===- subzero/src/IceCfgNode.cpp - Basic block (node) implementation -----===// |
2 // | 2 // |
3 // The Subzero Code Generator | 3 // The Subzero Code Generator |
4 // | 4 // |
5 // This file is distributed under the University of Illinois Open Source | 5 // This file is distributed under the University of Illinois Open Source |
6 // License. See LICENSE.TXT for details. | 6 // License. See LICENSE.TXT for details. |
7 // | 7 // |
8 //===----------------------------------------------------------------------===// | 8 //===----------------------------------------------------------------------===// |
9 /// | 9 /// |
10 /// \file | 10 /// \file |
(...skipping 1324 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1335 I = Helper.getBundleLockStart(); | 1335 I = Helper.getBundleLockStart(); |
1336 } | 1336 } |
1337 continue; | 1337 continue; |
1338 } | 1338 } |
1339 | 1339 |
1340 // I points to a non bundle_lock/bundle_unlock instruction. | 1340 // I points to a non bundle_lock/bundle_unlock instruction. |
1341 if (Helper.isInBundleLockRegion()) { | 1341 if (Helper.isInBundleLockRegion()) { |
1342 I->emitIAS(Func); | 1342 I->emitIAS(Func); |
1343 // Only update stats during the final pass. | 1343 // Only update stats during the final pass. |
1344 if (Retrying) | 1344 if (Retrying) |
1345 updateStats(Func, I); | 1345 updateStats(Func, iteratorToInst(I)); |
1346 } else { | 1346 } else { |
1347 // Treat it as though there were an implicit bundle_lock and | 1347 // Treat it as though there were an implicit bundle_lock and |
1348 // bundle_unlock wrapping the instruction. | 1348 // bundle_unlock wrapping the instruction. |
1349 Helper.enterBundleLock(I); | 1349 Helper.enterBundleLock(I); |
1350 I->emitIAS(Func); | 1350 I->emitIAS(Func); |
1351 Helper.enterBundleUnlock(); | 1351 Helper.enterBundleUnlock(); |
1352 Helper.rollback(); | 1352 Helper.rollback(); |
1353 Helper.padToNextBundle(); | 1353 Helper.padToNextBundle(); |
1354 I->emitIAS(Func); | 1354 I->emitIAS(Func); |
1355 updateStats(Func, I); | 1355 updateStats(Func, iteratorToInst(I)); |
1356 Helper.leaveBundleLockRegion(); | 1356 Helper.leaveBundleLockRegion(); |
1357 } | 1357 } |
1358 } | 1358 } |
1359 | 1359 |
1360 // Don't allow bundle locking across basic blocks, to keep the backtracking | 1360 // Don't allow bundle locking across basic blocks, to keep the backtracking |
1361 // mechanism simple. | 1361 // mechanism simple. |
1362 assert(!Helper.isInBundleLockRegion()); | 1362 assert(!Helper.isInBundleLockRegion()); |
1363 assert(!Retrying); | 1363 assert(!Retrying); |
1364 } | 1364 } |
1365 | 1365 |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1466 auto *Instr = InstIntrinsicCall::create( | 1466 auto *Instr = InstIntrinsicCall::create( |
1467 Func, 5, Func->makeVariable(IceType_i64), RMWI64Name, Info->Info); | 1467 Func, 5, Func->makeVariable(IceType_i64), RMWI64Name, Info->Info); |
1468 Instr->addArg(AtomicRMWOp); | 1468 Instr->addArg(AtomicRMWOp); |
1469 Instr->addArg(Counter); | 1469 Instr->addArg(Counter); |
1470 Instr->addArg(One); | 1470 Instr->addArg(One); |
1471 Instr->addArg(OrderAcquireRelease); | 1471 Instr->addArg(OrderAcquireRelease); |
1472 Insts.push_front(Instr); | 1472 Insts.push_front(Instr); |
1473 } | 1473 } |
1474 | 1474 |
1475 } // end of namespace Ice | 1475 } // end of namespace Ice |
OLD | NEW |