mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
add optional param to copy metadata when creating selects; NFC
There are other spots where we can use this; we're currently dropping metadata in some places, and there are proposed changes where we will want to propagate metadata. IRBuilder's CreateSelect() already has a parameter like this, so this change makes the regular 'Create' API line up with that. llvm-svn: 287976
This commit is contained in:
parent
80de3aea41
commit
29cd3b551c
@ -1904,9 +1904,14 @@ protected:
|
||||
public:
|
||||
static SelectInst *Create(Value *C, Value *S1, Value *S2,
|
||||
const Twine &NameStr = "",
|
||||
Instruction *InsertBefore = nullptr) {
|
||||
return new(3) SelectInst(C, S1, S2, NameStr, InsertBefore);
|
||||
Instruction *InsertBefore = nullptr,
|
||||
Instruction *MDFrom = nullptr) {
|
||||
SelectInst *Sel = new(3) SelectInst(C, S1, S2, NameStr, InsertBefore);
|
||||
if (MDFrom)
|
||||
Sel->copyMetadata(*MDFrom);
|
||||
return Sel;
|
||||
}
|
||||
|
||||
static SelectInst *Create(Value *C, Value *S1, Value *S2,
|
||||
const Twine &NameStr,
|
||||
BasicBlock *InsertAtEnd) {
|
||||
|
@ -531,8 +531,7 @@ canonicalizeMinMaxWithConstant(SelectInst &Sel, ICmpInst &Cmp,
|
||||
std::swap(LHS, RHS);
|
||||
|
||||
Value *NewCmp = Builder.CreateICmp(NewPred, LHS, RHS);
|
||||
SelectInst *NewSel = SelectInst::Create(NewCmp, LHS, RHS);
|
||||
NewSel->copyMetadata(Sel);
|
||||
SelectInst *NewSel = SelectInst::Create(NewCmp, LHS, RHS, "", nullptr, &Sel);
|
||||
|
||||
// We swapped the select operands, so swap the metadata too.
|
||||
NewSel->swapProfMetadata();
|
||||
@ -995,21 +994,18 @@ Instruction *InstCombiner::foldSelectExtConst(SelectInst &Sel) {
|
||||
// If one arm of the select is the extend of the condition, replace that arm
|
||||
// with the extension of the appropriate known bool value.
|
||||
if (Cond == X) {
|
||||
SelectInst *NewSel;
|
||||
if (ExtInst == Sel.getTrueValue()) {
|
||||
// select X, (sext X), C --> select X, -1, C
|
||||
// select X, (zext X), C --> select X, 1, C
|
||||
Constant *One = ConstantInt::getTrue(SmallType);
|
||||
Constant *AllOnesOrOne = ConstantExpr::getCast(ExtOpcode, One, SelType);
|
||||
NewSel = SelectInst::Create(Cond, AllOnesOrOne, C);
|
||||
return SelectInst::Create(Cond, AllOnesOrOne, C, "", nullptr, &Sel);
|
||||
} else {
|
||||
// select X, C, (sext X) --> select X, C, 0
|
||||
// select X, C, (zext X) --> select X, C, 0
|
||||
Constant *Zero = ConstantInt::getNullValue(SelType);
|
||||
NewSel = SelectInst::Create(Cond, C, Zero);
|
||||
return SelectInst::Create(Cond, C, Zero, "", nullptr, &Sel);
|
||||
}
|
||||
NewSel->copyMetadata(Sel);
|
||||
return NewSel;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
|
Loading…
x
Reference in New Issue
Block a user