Simplify ~mask codegen to emit single XOR like other places in the code.

This commit is contained in:
james.brodman
2013-05-15 16:57:41 -04:00
parent a38fcf1127
commit 60c5bef90f

10
ctx.cpp
View File

@@ -553,8 +553,10 @@ FunctionEmitContext::EndIf() {
breakLanes, "|break_lanes"); breakLanes, "|break_lanes");
} }
llvm::Value *notBreakOrContinue = llvm::Value *notBreakOrContinue =
NotOperator(bcLanes, "!(break|continue)_lanes"); BinaryOperator(llvm::Instruction::Xor,
bcLanes, LLVMMaskAllOn,
"!(break|continue)_lanes");
llvm::Value *oldMask = GetInternalMask(); llvm::Value *oldMask = GetInternalMask();
llvm::Value *newMask = llvm::Value *newMask =
BinaryOperator(llvm::Instruction::And, oldMask, BinaryOperator(llvm::Instruction::And, oldMask,
@@ -659,7 +661,9 @@ FunctionEmitContext::restoreMaskGivenReturns(llvm::Value *oldMask) {
// newMask = (oldMask & ~returnedLanes) // newMask = (oldMask & ~returnedLanes)
llvm::Value *returnedLanes = LoadInst(returnedLanesPtr, llvm::Value *returnedLanes = LoadInst(returnedLanesPtr,
"returned_lanes"); "returned_lanes");
llvm::Value *notReturned = NotOperator(returnedLanes, "~returned_lanes"); llvm::Value *notReturned = BinaryOperator(llvm::Instruction::Xor,
returnedLanes, LLVMMaskAllOn,
"~returned_lanes");
llvm::Value *newMask = BinaryOperator(llvm::Instruction::And, llvm::Value *newMask = BinaryOperator(llvm::Instruction::And,
oldMask, notReturned, "new_mask"); oldMask, notReturned, "new_mask");
SetInternalMask(newMask); SetInternalMask(newMask);