aboutsummaryrefslogtreecommitdiff
path: root/lib/Transforms/Utils/AddrModeMatcher.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2010-04-15 04:48:01 +0000
committerChris Lattner <sabre@nondot.org>2010-04-15 04:48:01 +0000
commit2392ae7d7344674dc3d946e324342515f4771b90 (patch)
tree2d8213997e4ea96040beda18dcf7cffe95789eee /lib/Transforms/Utils/AddrModeMatcher.cpp
parentae541aad5c36cb3e4256514447d1f81e253079c7 (diff)
Implement rdar://7860110 (also in target/readme.txt) narrowing
a load/or/and/store sequence into a narrower store when it is safe. Daniel tells me that clang will start producing this sort of thing with bitfields, and this does trigger a few dozen times on 176.gcc produced by llvm-gcc even now. This compiles code like CodeGen/X86/2009-05-28-DAGCombineCrash.ll into: movl %eax, 36(%rdi) instead of: movl $4294967295, %eax ## imm = 0xFFFFFFFF andq 32(%rdi), %rax shlq $32, %rcx addq %rax, %rcx movq %rcx, 32(%rdi) and each of the testcases into a single store. Each of them used to compile into craziness like this: _test4: movl $65535, %eax ## imm = 0xFFFF andl (%rdi), %eax shll $16, %esi addl %eax, %esi movl %esi, (%rdi) ret git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101343 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/Utils/AddrModeMatcher.cpp')
0 files changed, 0 insertions, 0 deletions