mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-22 04:22:57 +02:00
6bd4a58365
leads to partial-register definitions. To help avoid redundant zero-extensions, also teach the h-register matching patterns that use movzbl to match anyext as well as zext. llvm-svn: 80099
19 lines
436 B
LLVM
19 lines
436 B
LLVM
; RUN: llvm-as < %s | llc -march=x86-64 | grep movzbl | count 2
|
|
|
|
; Use movzbl to avoid partial-register updates.
|
|
|
|
define i32 @foo(i32 %p, i8 zeroext %x) nounwind {
|
|
%q = trunc i32 %p to i8
|
|
%r = udiv i8 %q, %x
|
|
%s = zext i8 %r to i32
|
|
%t = and i32 %s, 1
|
|
ret i32 %t
|
|
}
|
|
define i32 @bar(i32 %p, i16 zeroext %x) nounwind {
|
|
%q = trunc i32 %p to i16
|
|
%r = udiv i16 %q, %x
|
|
%s = zext i16 %r to i32
|
|
%t = and i32 %s, 1
|
|
ret i32 %t
|
|
}
|