mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-05 02:07:16 +00:00
fix PR8613 - Copy constructor of SwitchInst does not call SwitchInst::init
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@119463 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
b75c651e22
commit
aa6e350c88
@ -2161,7 +2161,7 @@ class SwitchInst : public TerminatorInst {
|
||||
// Operand[2n ] = Value to match
|
||||
// Operand[2n+1] = BasicBlock to go to on match
|
||||
SwitchInst(const SwitchInst &SI);
|
||||
void init(Value *Value, BasicBlock *Default, unsigned NumCases);
|
||||
void init(Value *Value, BasicBlock *Default, unsigned NumReserved);
|
||||
void resizeOperands(unsigned No);
|
||||
// allocate space for exactly zero operands
|
||||
void *operator new(size_t s) {
|
||||
|
@ -2939,9 +2939,9 @@ bool CmpInst::isFalseWhenEqual(unsigned short predicate) {
|
||||
// SwitchInst Implementation
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
void SwitchInst::init(Value *Value, BasicBlock *Default, unsigned NumCases) {
|
||||
assert(Value && Default);
|
||||
ReservedSpace = 2+NumCases*2;
|
||||
void SwitchInst::init(Value *Value, BasicBlock *Default, unsigned NumReserved) {
|
||||
assert(Value && Default && NumReserved);
|
||||
ReservedSpace = NumReserved;
|
||||
NumOperands = 2;
|
||||
OperandList = allocHungoffUses(ReservedSpace);
|
||||
|
||||
@ -2957,7 +2957,7 @@ SwitchInst::SwitchInst(Value *Value, BasicBlock *Default, unsigned NumCases,
|
||||
Instruction *InsertBefore)
|
||||
: TerminatorInst(Type::getVoidTy(Value->getContext()), Instruction::Switch,
|
||||
0, 0, InsertBefore) {
|
||||
init(Value, Default, NumCases);
|
||||
init(Value, Default, 2+NumCases*2);
|
||||
}
|
||||
|
||||
/// SwitchInst ctor - Create a new switch instruction, specifying a value to
|
||||
@ -2968,14 +2968,15 @@ SwitchInst::SwitchInst(Value *Value, BasicBlock *Default, unsigned NumCases,
|
||||
BasicBlock *InsertAtEnd)
|
||||
: TerminatorInst(Type::getVoidTy(Value->getContext()), Instruction::Switch,
|
||||
0, 0, InsertAtEnd) {
|
||||
init(Value, Default, NumCases);
|
||||
init(Value, Default, 2+NumCases*2);
|
||||
}
|
||||
|
||||
SwitchInst::SwitchInst(const SwitchInst &SI)
|
||||
: TerminatorInst(Type::getVoidTy(SI.getContext()), Instruction::Switch,
|
||||
allocHungoffUses(SI.getNumOperands()), SI.getNumOperands()) {
|
||||
: TerminatorInst(SI.getType(), Instruction::Switch, 0, 0) {
|
||||
init(SI.getCondition(), SI.getDefaultDest(), SI.getNumOperands());
|
||||
NumOperands = SI.getNumOperands();
|
||||
Use *OL = OperandList, *InOL = SI.OperandList;
|
||||
for (unsigned i = 0, E = SI.getNumOperands(); i != E; i+=2) {
|
||||
for (unsigned i = 2, E = SI.getNumOperands(); i != E; i += 2) {
|
||||
OL[i] = InOL[i];
|
||||
OL[i+1] = InOL[i+1];
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user