mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 04:30:23 +00:00
let the '!eq' expression support 'int' and 'bit' types
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@106171 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d0e8469ba6
commit
e87de41189
@ -425,8 +425,8 @@ class. This operation is analogous to $(foreach) in GNU make.</dd>
|
||||
<dd>'b' if the result of integer operator 'a' is nonzero, 'c' otherwise.</dd>
|
||||
<dt><tt>!eq(a,b)</tt></dt>
|
||||
<dd>Integer one if string a is equal to string b, zero otherwise. This
|
||||
only operates on string objects. Use !cast<string> to compare other
|
||||
types of objects.</dd>
|
||||
only operates on string, int and bit objects. Use !cast<string> to
|
||||
compare other types of objects.</dd>
|
||||
</dl>
|
||||
|
||||
<p>Note that all of the values have rules specifying how they convert to values
|
||||
|
11
test/TableGen/eqbit.td
Normal file
11
test/TableGen/eqbit.td
Normal file
@ -0,0 +1,11 @@
|
||||
// RUN: tblgen %s | FileCheck %s
|
||||
// XFAIL: vg_leak
|
||||
// CHECK: a = 6
|
||||
// CHECK: a = 5
|
||||
|
||||
class A<bit b = 1> {
|
||||
int a = !if(!eq(b, 1), 5, 6);
|
||||
}
|
||||
|
||||
def X : A<0>;
|
||||
def Y : A;
|
@ -721,9 +721,20 @@ Init *BinOpInit::Fold(Record *CurRec, MultiClass *CurMultiClass) {
|
||||
break;
|
||||
}
|
||||
case EQ: {
|
||||
// Make sure we've resolved
|
||||
// try to fold eq comparison for 'bit' and 'int', otherwise fallback
|
||||
// to string objects.
|
||||
IntInit* L =
|
||||
dynamic_cast<IntInit*>(LHS->convertInitializerTo(new IntRecTy()));
|
||||
IntInit* R =
|
||||
dynamic_cast<IntInit*>(RHS->convertInitializerTo(new IntRecTy()));
|
||||
|
||||
if (L && R)
|
||||
return new IntInit(L->getValue() == R->getValue());
|
||||
|
||||
StringInit *LHSs = dynamic_cast<StringInit*>(LHS);
|
||||
StringInit *RHSs = dynamic_cast<StringInit*>(RHS);
|
||||
|
||||
// Make sure we've resolved
|
||||
if (LHSs && RHSs)
|
||||
return new IntInit(LHSs->getValue() == RHSs->getValue());
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user