mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-03 00:33:09 +00:00
a bad case for bitfield insert
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24051 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
0d841e0567
commit
0195910558
@ -185,3 +185,37 @@ doesn't get folded into the rlwimi instruction. We should ideally see through
|
|||||||
things like this, rather than forcing llvm to generate the equivalent
|
things like this, rather than forcing llvm to generate the equivalent
|
||||||
|
|
||||||
(shl (add bitfield, C2), C1) with some kind of mask.
|
(shl (add bitfield, C2), C1) with some kind of mask.
|
||||||
|
|
||||||
|
===-------------------------------------------------------------------------===
|
||||||
|
|
||||||
|
Compile this (standard bitfield insert of a constant):
|
||||||
|
void %test(uint* %tmp1) {
|
||||||
|
%tmp2 = load uint* %tmp1 ; <uint> [#uses=1]
|
||||||
|
%tmp5 = or uint %tmp2, 257949696 ; <uint> [#uses=1]
|
||||||
|
%tmp6 = and uint %tmp5, 4018143231 ; <uint> [#uses=1]
|
||||||
|
store uint %tmp6, uint* %tmp1
|
||||||
|
ret void
|
||||||
|
}
|
||||||
|
|
||||||
|
to:
|
||||||
|
|
||||||
|
_test:
|
||||||
|
lwz r0,0(r3)
|
||||||
|
li r2,123
|
||||||
|
rlwimi r0,r2,21,3,10
|
||||||
|
stw r0,0(r3)
|
||||||
|
blr
|
||||||
|
|
||||||
|
instead of:
|
||||||
|
|
||||||
|
_test:
|
||||||
|
lis r2, -4225
|
||||||
|
lwz r4, 0(r3)
|
||||||
|
ori r2, r2, 65535
|
||||||
|
oris r4, r4, 3936
|
||||||
|
and r2, r4, r2
|
||||||
|
stw r2, 0(r3)
|
||||||
|
blr
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user