| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
| |
is that there is
NO path to the destination containing side effects, not that SOME path contains no side effects.
In practice, this only manifests with CombinerAA enabled, because otherwise the chain has little
to no branching, so "any" is effectively equivalent to "all".
llvm-svn: 114268
|
| |
|
|
|
|
| |
This fixes funcargs.exp regression reported by gdb testsuite.
llvm-svn: 113992
|
| |
|
|
|
|
| |
use offset available in StaticAllocaMap to emit DBG_VALUE. Right now, this has no material impact because varible info also collected using offset table maintained in machine module info.
llvm-svn: 113967
|
| |
|
|
|
|
| |
Otherwise let getRegForValue() find register for this argument.
llvm-svn: 113843
|
| |
|
|
|
|
|
|
|
|
| |
This reverts commit r113632
Conflicts:
cmake/modules/AddLLVM.cmake
llvm-svn: 113819
|
| |
|
|
| |
llvm-svn: 113771
|
| |
|
|
| |
llvm-svn: 113766
|
| |
|
|
| |
llvm-svn: 113632
|
| |
|
|
| |
llvm-svn: 113614
|
| |
|
|
|
|
|
|
|
|
|
| |
take multiple cycles to decode.
For the current if-converter clients (actually only ARM), the instructions that
are predicated on false are not nops. They would still take machine cycles to
decode. Micro-coded instructions such as LDM / STM can potentially take multiple
cycles to decode. If-converter should take treat them as non-micro-coded
simple instructions.
llvm-svn: 113570
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Since mem2reg isn't run at -O0, we get a ton of reloads from the stack,
for example, before, this code:
int foo(int x, int y, int z) {
return x+y+z;
}
used to compile into:
_foo: ## @foo
subq $12, %rsp
movl %edi, 8(%rsp)
movl %esi, 4(%rsp)
movl %edx, (%rsp)
movl 8(%rsp), %edx
movl 4(%rsp), %esi
addl %edx, %esi
movl (%rsp), %edx
addl %esi, %edx
movl %edx, %eax
addq $12, %rsp
ret
Now we produce:
_foo: ## @foo
subq $12, %rsp
movl %edi, 8(%rsp)
movl %esi, 4(%rsp)
movl %edx, (%rsp)
movl 8(%rsp), %edx
addl 4(%rsp), %edx ## Folded load
addl (%rsp), %edx ## Folded load
movl %edx, %eax
addq $12, %rsp
ret
Fewer instructions and less register use = faster compiles.
llvm-svn: 113102
|
| |
|
|
|
|
|
| |
solve the root problem, but it corrects the bug in the code I added to
support legalizing in the case where the non-extended type is also legal.
llvm-svn: 112997
|
| |
|
|
| |
llvm-svn: 112864
|
| |
|
|
|
|
|
|
|
|
| |
there are clearly no stores between the load and the store. This fixes
this miscompile reported as PR7833.
This breaks the test/CodeGen/X86/narrow_op-2.ll optimization, which is
safe, but awkward to prove safe. Move it to X86's README.txt.
llvm-svn: 112861
|
| |
|
|
| |
llvm-svn: 112858
|
| |
|
|
| |
llvm-svn: 112659
|
| |
|
|
| |
llvm-svn: 112631
|
| |
|
|
|
|
|
|
| |
info to emit debug info.
Fixes Radar 8367011.
llvm-svn: 112623
|
| |
|
|
| |
llvm-svn: 112584
|
| |
|
|
| |
llvm-svn: 112571
|
| |
|
|
| |
llvm-svn: 112463
|
| |
|
|
|
|
| |
said (physical) register.
llvm-svn: 112461
|
| |
|
|
|
|
| |
being actively maintained, improved, or extended.
llvm-svn: 112356
|
| |
|
|
|
|
| |
doesn't currently support dealing with this.
llvm-svn: 112341
|
| |
|
|
| |
llvm-svn: 112340
|
| |
|
|
| |
llvm-svn: 112305
|
| |
|
|
| |
llvm-svn: 112242
|
| |
|
|
|
|
| |
byval parameter.
llvm-svn: 112238
|
| |
|
|
| |
llvm-svn: 112216
|
| |
|
|
| |
llvm-svn: 112215
|
| |
|
|
| |
llvm-svn: 112213
|
| |
|
|
|
|
| |
register, used for a value, is initialized after a dbg intrinsic is seen.
llvm-svn: 112207
|
| |
|
|
|
|
| |
lack sse2.
llvm-svn: 112175
|
| |
|
|
| |
llvm-svn: 112171
|
| |
|
|
| |
llvm-svn: 112155
|
| |
|
|
| |
llvm-svn: 112104
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
expanding: e.g. <2 x float> -> <4 x float> instead of -> 2 floats. This
affects two places in the code: handling cross block values and handling
function return and arguments. Since vectors are already widened by
legalizetypes, this gives us much better code and unblocks x86-64 abi
and SPU abi work.
For example, this (which is a silly example of a cross-block value):
define <4 x float> @test2(<4 x float> %A) nounwind {
%B = shufflevector <4 x float> %A, <4 x float> undef, <2 x i32> <i32 0, i32 1>
%C = fadd <2 x float> %B, %B
br label %BB
BB:
%D = fadd <2 x float> %C, %C
%E = shufflevector <2 x float> %D, <2 x float> undef, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>
ret <4 x float> %E
}
Now compiles into:
_test2: ## @test2
## BB#0:
addps %xmm0, %xmm0
addps %xmm0, %xmm0
ret
previously it compiled into:
_test2: ## @test2
## BB#0:
addps %xmm0, %xmm0
pshufd $1, %xmm0, %xmm1
## kill: XMM0<def> XMM0<kill> XMM0<def>
insertps $0, %xmm0, %xmm0
insertps $16, %xmm1, %xmm0
addps %xmm0, %xmm0
ret
This implements rdar://8230384
llvm-svn: 112101
|
| |
|
|
| |
llvm-svn: 112086
|
| |
|
|
| |
llvm-svn: 112085
|
| |
|
|
|
|
| |
no functionality change.
llvm-svn: 111994
|
| |
|
|
|
|
| |
functionality change.
llvm-svn: 111990
|
| |
|
|
| |
llvm-svn: 111982
|
| |
|
|
|
|
|
| |
hierarchy with virtual methods and using llvm_unreachable to properly indicate
unreachable states which would otherwise leave variables uninitialized.
llvm-svn: 111803
|
| |
|
|
|
|
|
|
|
|
|
| |
it involves specific floating-point types, legalize should expand an
extending load to a non-extending load followed by a separate extend operation.
For example, we currently expand SEXTLOAD to EXTLOAD+SIGN_EXTEND_INREG (and
assert that EXTLOAD should always be supported). Now we can expand that to
LOAD+SIGN_EXTEND. This is needed to allow vector SIGN_EXTEND and ZERO_EXTEND
to be used for NEON.
llvm-svn: 111586
|
| |
|
|
|
|
| |
PR 7882. Follows suggestion by Amaury Pouly, thanks.
llvm-svn: 111306
|
| |
|
|
| |
llvm-svn: 111223
|
| |
|
|
| |
llvm-svn: 110649
|
| |
|
|
| |
llvm-svn: 110460
|
| |
|
|
| |
llvm-svn: 110410
|
| |
|
|
|
|
|
|
| |
address of the static
ID member as the sole unique type identifier. Clean up APIs related to this change.
llvm-svn: 110396
|