mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-29 14:20:29 +00:00
TableGen: Support folding casts from bits to int
This is to fix an incorrect error when trying to initialize DwarfNumbers with a !cast<int> of a bits initializer. getValuesAsListOfInts("DwarfNumbers") would not see an IntInit and instead the cast, so would give up. It seems likely that this could be generalized to attempt the convertInitializerTo for any type. I'm not really sure why the existing code seems to special case the string cast cases when convertInitializerTo seems like it should generally handle this sort of thing. llvm-svn: 243722
This commit is contained in:
parent
ed81d4cf34
commit
bd927a4ea1
@ -673,6 +673,14 @@ Init *UnOpInit::Fold(Record *CurRec, MultiClass *CurMultiClass) const {
|
||||
PrintFatalError(CurRec->getLoc(),
|
||||
"Undefined reference:'" + Name + "'\n");
|
||||
}
|
||||
|
||||
if (isa<IntRecTy>(getType())) {
|
||||
if (BitsInit *BI = dyn_cast<BitsInit>(LHS)) {
|
||||
if (Init *NewInit = BI->convertInitializerTo(IntRecTy::get()))
|
||||
return NewInit;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
10
test/TableGen/cast-list-initializer.td
Normal file
10
test/TableGen/cast-list-initializer.td
Normal file
@ -0,0 +1,10 @@
|
||||
// RUN: llvm-tblgen %s | FileCheck %s
|
||||
|
||||
class Foo<bits<8> b> {
|
||||
// CHECK: list<int> ListOfInts = [170];
|
||||
// CHECK: list<int> AnotherList = [170, 7];
|
||||
list<int> ListOfInts = [!cast<int>(b)];
|
||||
list<int> AnotherList = [!cast<int>(b), !cast<int>({1, 1, 1})];
|
||||
}
|
||||
|
||||
def : Foo<{1, 0, 1, 0, 1, 0, 1, 0}>;
|
Loading…
Reference in New Issue
Block a user