recognize (e ? e : f) (#20935)

This commit is contained in:
Walter Bright 2025-03-02 11:03:44 -08:00 committed by GitHub
parent 6ee6720516
commit ab57e77c03
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 3 additions and 4 deletions

View file

@ -2356,7 +2356,7 @@ void loaddata(ref CodeBuilder cdb, elem* e, ref regm_t outretregs)
if (tyfloating(tym))
{
loadea(cdb,e,cs,0,reg,0,0,0,RM.load);
outretregs = mask(reg);
outretregs = mask(reg) | flags;
}
else
{

View file

@ -545,8 +545,7 @@ void cdcond(ref CGstate cg, ref CodeBuilder cdb,elem* e,ref regm_t pretregs)
docommas(cdb,e1);
cgstate.stackclean++;
if (0 && !OTrel(op1) && e1 == e21 && // TODO AArch64
sz1 <= REGSIZE && !tyfloating(e1.Ety))
if (!OTrel(op1) && e1 == e21 && sz1 <= REGSIZE)
{ // Recognize (e ? e : f)
code* cnop1 = gen1(null, INSTR.nop);
@ -561,7 +560,7 @@ void cdcond(ref CGstate cg, ref CodeBuilder cdb,elem* e,ref regm_t pretregs)
const stackpushsave = cgstate.stackpush;
retregs |= psw;
if (retregs & (mBP | ALLREGS))
if (retregs & cgstate.allregs) // TODO AArch64 add support for fp registers
cgstate.regimmed_set(findreg(retregs),0);
codelem(cgstate,cdb,e22,retregs,false);