diff options
| author | 2025-11-05 13:56:54 +0100 | |
|---|---|---|
| committer | 2025-11-05 19:02:44 +0100 | |
| commit | 13471741b538baa45cd53a521cf7d52087f3200f (patch) | |
| tree | 15624e0f3a2e8a11f2c114f8309af6e3207193c0 /ir/optmem.c | |
| parent | 088c3c1ce51de82ef317592bae766ad20f82208d (diff) | |
amd64: fix aggregate abi stuff;; ir: fold, peephole optimizing constructors
Diffstat (limited to 'ir/optmem.c')
| -rw-r--r-- | ir/optmem.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/ir/optmem.c b/ir/optmem.c index 471f11c..9b71c8d 100644 --- a/ir/optmem.c +++ b/ir/optmem.c @@ -246,6 +246,20 @@ mem2reg(struct function *fn) k, mkref(RREG, mctarg->bpr)); } else { adduse(use->blk, use->u, val); + if (isintcon(val) && ext != Ocopy) { + vlong x = intconval(val); + switch (ext) { + case Oexts1: x = (schar)x; break; + case Oextu1: x = (uchar)x; break; + case Oexts2: x = (short)x; break; + case Oextu2: x = (ushort)x; break; + case Oexts4: x = (int)x; break; + case Oextu4: x = (uint)x; break; + default: assert(0); + } + val = mkintcon(k, x); + ext = Ocopy; + } *m = mkinstr(ext, k, val); } } |