mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-18 13:34:04 +00:00
Don't require src/dst patterns to be able to fully resolve their types,
because information about one can help refine the other. This allows us to write: def : Pat<(i32 (extload xaddr:$src, i8)), (LBZX xaddr:$src)>; as: def : Pat<(extload xaddr:$src, i8), (LBZX xaddr:$src)>; because tblgen knows LBZX returns i32. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28865 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
30da68acce
commit
186fb7d131
@ -1568,17 +1568,16 @@ void DAGISelEmitter::ParsePatterns() {
|
||||
"with temporaries yet!");
|
||||
|
||||
bool IterateInference;
|
||||
bool InferredAllPatternTypes, InferredAllResultTypes;
|
||||
do {
|
||||
// Infer as many types as possible. If we cannot infer all of them, we
|
||||
// can never do anything with this pattern: report it to the user.
|
||||
if (!Pattern->InferAllTypes())
|
||||
Pattern->error("Could not infer all types in pattern!");
|
||||
InferredAllPatternTypes = Pattern->InferAllTypes();
|
||||
|
||||
// Infer as many types as possible. If we cannot infer all of them, we can
|
||||
// never do anything with this pattern: report it to the user.
|
||||
if (!Result->InferAllTypes())
|
||||
Result->error("Could not infer all types in pattern result!");
|
||||
|
||||
InferredAllResultTypes = Result->InferAllTypes();
|
||||
|
||||
// Apply the type of the result to the source pattern. This helps us
|
||||
// resolve cases where the input type is known to be a pointer type (which
|
||||
// is considered resolved), but the result knows it needs to be 32- or
|
||||
@ -1588,6 +1587,13 @@ void DAGISelEmitter::ParsePatterns() {
|
||||
IterateInference |= Result->getOnlyTree()->
|
||||
UpdateNodeType(Pattern->getOnlyTree()->getExtTypes(), *Result);
|
||||
} while (IterateInference);
|
||||
|
||||
// Verify that we inferred enough types that we can do something with the
|
||||
// pattern and result. If these fire the user has to add type casts.
|
||||
if (!InferredAllPatternTypes)
|
||||
Pattern->error("Could not infer all types in pattern!");
|
||||
if (!InferredAllResultTypes)
|
||||
Result->error("Could not infer all types in pattern result!");
|
||||
|
||||
// Validate that the input pattern is correct.
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user