forked from OSchip/llvm-project
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
4fca6e8063
commit
a7bc7db53c
|
@ -673,6 +673,14 @@ Init *UnOpInit::Fold(Record *CurRec, MultiClass *CurMultiClass) const {
|
||||||
PrintFatalError(CurRec->getLoc(),
|
PrintFatalError(CurRec->getLoc(),
|
||||||
"Undefined reference:'" + Name + "'\n");
|
"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;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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