diff --git a/ctx.cpp b/ctx.cpp index 8def00c9..9ad62b3b 100644 --- a/ctx.cpp +++ b/ctx.cpp @@ -381,13 +381,8 @@ FunctionEmitContext::GetInternalMask() { llvm::Value * FunctionEmitContext::GetFullMask() { - llvm::Value *internalMask = GetInternalMask(); - if (internalMask == LLVMMaskAllOn && functionMaskValue == LLVMMaskAllOn && - !g->opt.disableMaskAllOnOptimizations) - return LLVMMaskAllOn; - else - return BinaryOperator(llvm::Instruction::And, GetInternalMask(), - functionMaskValue, "internal_mask&function_mask"); + return BinaryOperator(llvm::Instruction::And, GetInternalMask(), + functionMaskValue, "internal_mask&function_mask"); } @@ -673,9 +668,7 @@ FunctionEmitContext::Break(bool doCoherenceCheck) { // If all of the enclosing 'if' tests in the loop have uniform control // flow or if we can tell that the mask is all on, then we can just // jump to the break location. - if (inSwitchStatement() == false && - (ifsInCFAllUniform(CFInfo::Loop) || - GetInternalMask() == LLVMMaskAllOn)) { + if (inSwitchStatement() == false && ifsInCFAllUniform(CFInfo::Loop)) { BranchInst(breakTarget); if (ifsInCFAllUniform(CFInfo::Loop) && doCoherenceCheck) Warning(currentPos, "Coherent break statement not necessary in " @@ -730,7 +723,7 @@ FunctionEmitContext::Continue(bool doCoherenceCheck) { } AssertPos(currentPos, controlFlowInfo.size() > 0); - if (ifsInCFAllUniform(CFInfo::Loop) || GetInternalMask() == LLVMMaskAllOn) { + if (ifsInCFAllUniform(CFInfo::Loop)) { // Similarly to 'break' statements, we can immediately jump to the // continue target if we're only in 'uniform' control flow within // loop or if we can tell that the mask is all on. diff --git a/stmt.cpp b/stmt.cpp index 6049d4e2..eb626c0b 100644 --- a/stmt.cpp +++ b/stmt.cpp @@ -494,16 +494,7 @@ IfStmt::emitMaskedTrueAndFalse(FunctionEmitContext *ctx, llvm::Value *oldMask, void IfStmt::emitVaryingIf(FunctionEmitContext *ctx, llvm::Value *ltest) const { llvm::Value *oldMask = ctx->GetInternalMask(); - if (ctx->GetFullMask() == LLVMMaskAllOn && - !g->opt.disableCoherentControlFlow && - !g->opt.disableMaskAllOnOptimizations) { - // We can tell that the mask is on statically at compile time; just - // emit code for the 'if test with the mask all on' path - llvm::BasicBlock *bDone = ctx->CreateBasicBlock("cif_done"); - emitMaskAllOn(ctx, ltest, bDone); - ctx->SetCurrentBasicBlock(bDone); - } - else if (doAllCheck) { + if (doAllCheck) { // We can't tell if the mask going into the if is all on at the // compile time. Emit code to check for this and then either run // the code for the 'all on' or the 'mixed' case depending on the