mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-08 19:48:20 +02:00
Did proper badOps handling for both arg0 and arg1 being immediates
This commit is contained in:
parent
60c19c4160
commit
eb0cd3aefb
2 changed files with 17 additions and 4 deletions
|
@ -9060,7 +9060,15 @@ bool BeMCContext::DoLegalization()
|
|||
if (isMov_R64_IMM64)
|
||||
doStdCheck = false;
|
||||
bool is3FormMul = false;
|
||||
if ((isIntMul) && (inst->mResult))
|
||||
bool badOps = false;
|
||||
|
||||
// Two immediates are never allowed. This can happen in cases like '(a % 1) * 2'
|
||||
if ((arg0.IsImmediate()) && (arg1.IsImmediate()))
|
||||
{
|
||||
badOps = true;
|
||||
doStdCheck = true;
|
||||
}
|
||||
else if ((isIntMul) && (inst->mResult))
|
||||
{
|
||||
is3FormMul = true;
|
||||
if (inst->mArg1.IsImmediateInt())
|
||||
|
@ -9083,7 +9091,6 @@ bool BeMCContext::DoLegalization()
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
// Int 3-form mul does not follow these rules
|
||||
if (doStdCheck)
|
||||
{
|
||||
|
@ -9091,7 +9098,6 @@ bool BeMCContext::DoLegalization()
|
|||
isIncOrDec = (((inst->mKind == BeMCInstKind_Add) || (inst->mKind == BeMCInstKind_Sub)) &&
|
||||
(arg1.IsImmediateInt()) && (arg1.mImmediate == 1));
|
||||
|
||||
bool badOps = false;
|
||||
if ((!isIncOrDec) && (!isIntMul) && (!isIntDiv))
|
||||
{
|
||||
if ((arg0.MayBeMemory()) && (arg1.MayBeMemory()))
|
||||
|
|
|
@ -377,6 +377,8 @@ namespace Tests
|
|||
}
|
||||
}
|
||||
|
||||
public struct Vector2 : this(float x, float y);
|
||||
|
||||
[Test]
|
||||
public static void TestBasics()
|
||||
{
|
||||
|
@ -492,6 +494,11 @@ namespace Tests
|
|||
|
||||
let oai2 = OuterOp2<float>.InnerOp<int>.Op(2.0f, 200);
|
||||
Test.Assert(oai2 == 202.0f);*/
|
||||
|
||||
const int c0 = 1;
|
||||
const int32 c1 = 1;
|
||||
int i0 = 0;
|
||||
var tVal = Vector2((i0 % c0) * (c1 + c1), 1);
|
||||
}
|
||||
|
||||
struct IntStruct
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue