mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-05 12:31:33 +00:00
implemented
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30559 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
111c228241
commit
b13f83eb23
@ -642,41 +642,6 @@ sequence)?
|
|||||||
|
|
||||||
//===---------------------------------------------------------------------===//
|
//===---------------------------------------------------------------------===//
|
||||||
|
|
||||||
Compile:
|
|
||||||
int %test(ulong *%tmp) {
|
|
||||||
%tmp = load ulong* %tmp ; <ulong> [#uses=1]
|
|
||||||
%tmp.mask = shr ulong %tmp, ubyte 50 ; <ulong> [#uses=1]
|
|
||||||
%tmp.mask = cast ulong %tmp.mask to ubyte
|
|
||||||
%tmp2 = and ubyte %tmp.mask, 3 ; <ubyte> [#uses=1]
|
|
||||||
%tmp2 = cast ubyte %tmp2 to int ; <int> [#uses=1]
|
|
||||||
ret int %tmp2
|
|
||||||
}
|
|
||||||
|
|
||||||
to:
|
|
||||||
|
|
||||||
_test:
|
|
||||||
movl 4(%esp), %eax
|
|
||||||
movl 4(%eax), %eax
|
|
||||||
shrl $18, %eax
|
|
||||||
andl $3, %eax
|
|
||||||
ret
|
|
||||||
|
|
||||||
instead of:
|
|
||||||
|
|
||||||
_test:
|
|
||||||
movl 4(%esp), %eax
|
|
||||||
movl 4(%eax), %eax
|
|
||||||
shrl $18, %eax
|
|
||||||
# TRUNCATE movb %al, %al
|
|
||||||
andb $3, %al
|
|
||||||
movzbl %al, %eax
|
|
||||||
ret
|
|
||||||
|
|
||||||
This saves a movzbl, and saves a truncate if it doesn't get coallesced right.
|
|
||||||
This is a simple DAGCombine to propagate the zext through the and.
|
|
||||||
|
|
||||||
//===---------------------------------------------------------------------===//
|
|
||||||
|
|
||||||
GCC's ix86_expand_int_movcc function (in i386.c) has a ton of interesting
|
GCC's ix86_expand_int_movcc function (in i386.c) has a ton of interesting
|
||||||
simplifications for integer "x cmp y ? a : b". For example, instead of:
|
simplifications for integer "x cmp y ? a : b". For example, instead of:
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user