diff options
author | Evan Cheng <evan.cheng@apple.com> | 2009-05-29 01:44:43 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2009-05-29 01:44:43 +0000 |
commit | cb219f0ef632ce74e613164ff65836c4ee7ef285 (patch) | |
tree | 4f77b4ef86f0b8fe32dd548595c055954c777cf6 /lib/Target | |
parent | d3c76bb6fc3c066286850e91b8bf03484ea2a56e (diff) | |
download | external_llvm-cb219f0ef632ce74e613164ff65836c4ee7ef285.zip external_llvm-cb219f0ef632ce74e613164ff65836c4ee7ef285.tar.gz external_llvm-cb219f0ef632ce74e613164ff65836c4ee7ef285.tar.bz2 |
More h-registers tricks: folding zext nodes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@72558 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target')
-rw-r--r-- | lib/Target/X86/X86Instr64bit.td | 19 | ||||
-rw-r--r-- | lib/Target/X86/X86InstrInfo.td | 4 |
2 files changed, 23 insertions, 0 deletions
diff --git a/lib/Target/X86/X86Instr64bit.td b/lib/Target/X86/X86Instr64bit.td index 77847e4..f58ba8d 100644 --- a/lib/Target/X86/X86Instr64bit.td +++ b/lib/Target/X86/X86Instr64bit.td @@ -1607,6 +1607,13 @@ def : Pat<(and (srl_su GR32:$src, (i8 8)), (i32 255)), (EXTRACT_SUBREG (COPY_TO_REGCLASS GR32:$src, GR32_ABCD), x86_subreg_8bit_hi))>, Requires<[In64BitMode]>; +def : Pat<(i64 (zext (srl_su GR32:$src, (i8 8)))), + (SUBREG_TO_REG + (i64 0), + (MOVZX32_NOREXrr8 + (EXTRACT_SUBREG (COPY_TO_REGCLASS GR32:$src, GR32_ABCD), + x86_subreg_8bit_hi)), + x86_subreg_32bit)>; def : Pat<(srl_su GR16:$src, (i8 8)), (EXTRACT_SUBREG (MOVZX32_NOREXrr8 @@ -1614,6 +1621,18 @@ def : Pat<(srl_su GR16:$src, (i8 8)), x86_subreg_8bit_hi)), x86_subreg_16bit)>, Requires<[In64BitMode]>; +def : Pat<(i32 (zext (srl_su GR16:$src, (i8 8)))), + (MOVZX32_NOREXrr8 + (EXTRACT_SUBREG (COPY_TO_REGCLASS GR16:$src, GR16_ABCD), + x86_subreg_8bit_hi))>, + Requires<[In64BitMode]>; +def : Pat<(i64 (zext (srl_su GR16:$src, (i8 8)))), + (SUBREG_TO_REG + (i64 0), + (MOVZX32_NOREXrr8 + (EXTRACT_SUBREG (COPY_TO_REGCLASS GR16:$src, GR16_ABCD), + x86_subreg_8bit_hi)), + x86_subreg_32bit)>; // h-register extract and store. def : Pat<(store (i8 (trunc_su (srl_su GR64:$src, (i8 8)))), addr:$dst), diff --git a/lib/Target/X86/X86InstrInfo.td b/lib/Target/X86/X86InstrInfo.td index 84c3573..50ae417 100644 --- a/lib/Target/X86/X86InstrInfo.td +++ b/lib/Target/X86/X86InstrInfo.td @@ -3538,6 +3538,10 @@ def : Pat<(srl_su GR16:$src, (i8 8)), x86_subreg_8bit_hi)), x86_subreg_16bit)>, Requires<[In32BitMode]>; +def : Pat<(i32 (zext (srl_su GR16:$src, (i8 8)))), + (MOVZX32rr8 (EXTRACT_SUBREG (COPY_TO_REGCLASS GR16:$src, GR16_ABCD), + x86_subreg_8bit_hi))>, + Requires<[In32BitMode]>; def : Pat<(and (srl_su GR32:$src, (i8 8)), (i32 255)), (MOVZX32rr8 (EXTRACT_SUBREG (COPY_TO_REGCLASS GR32:$src, GR32_ABCD), x86_subreg_8bit_hi))>, |