mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 12:41:49 +01:00
teach the optimizer that opcode == ISD::STORE is contradictory
with getType() == MVT::i32 etc. Teach it that two different integer constants are contradictory. This cuts 1K off the X86 table, down to 98k llvm-svn: 97314
This commit is contained in:
parent
ca018ea20b
commit
af34410efd
@ -267,7 +267,12 @@ bool CheckOpcodeMatcher::isContradictoryImpl(const Matcher *M) const {
|
||||
}
|
||||
|
||||
// TODO: CheckMultiOpcodeMatcher?
|
||||
// TODO: CheckType?
|
||||
|
||||
// This is a special common case we see a lot in the X86 backend, we know that
|
||||
// ISD::STORE nodes can't have non-void type.
|
||||
if (const CheckTypeMatcher *CT = dyn_cast<CheckTypeMatcher>(M))
|
||||
return getOpcodeName() == "ISD::STORE" && CT->getType() != MVT::isVoid;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -307,4 +312,8 @@ bool CheckChildTypeMatcher::isContradictoryImpl(const Matcher *M) const {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
bool CheckIntegerMatcher::isContradictoryImpl(const Matcher *M) const {
|
||||
if (const CheckIntegerMatcher *CIM = dyn_cast<CheckIntegerMatcher>(M))
|
||||
return CIM->getValue() != getValue();
|
||||
return false;
|
||||
}
|
||||
|
@ -511,6 +511,7 @@ private:
|
||||
return cast<CheckIntegerMatcher>(M)->Value == Value;
|
||||
}
|
||||
virtual unsigned getHashImpl() const { return Value; }
|
||||
virtual bool isContradictoryImpl(const Matcher *M) const;
|
||||
};
|
||||
|
||||
/// CheckCondCodeMatcher - This checks to see if the current node is a
|
||||
|
@ -202,14 +202,14 @@ static void FactorNodes(OwningPtr<Matcher> &MatcherPtr) {
|
||||
}
|
||||
|
||||
if (Scan != e) {
|
||||
DEBUG(errs() << "Couldn't merge this:\n ";
|
||||
Optn->printOne(errs());
|
||||
errs() << "into this:\n ";
|
||||
OptionsToMatch[OptionIdx]->printOne(errs());
|
||||
DEBUG(errs() << "Couldn't merge this:\n";
|
||||
Optn->print(errs(), 4);
|
||||
errs() << "into this:\n";
|
||||
OptionsToMatch[Scan]->print(errs(), 4);
|
||||
if (OptionIdx+1 != e)
|
||||
OptionsToMatch[OptionIdx+1]->printOne(errs());
|
||||
OptionsToMatch[Scan+1]->printOne(errs());
|
||||
if (OptionIdx+2 < e)
|
||||
OptionsToMatch[OptionIdx+2]->printOne(errs());
|
||||
OptionsToMatch[Scan+2]->printOne(errs());
|
||||
errs() << "\n");
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user