| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
llvm-svn: 122539
|
|
|
|
| |
llvm-svn: 122509
|
|
|
|
| |
llvm-svn: 122507
|
|
|
|
|
|
| |
and instruction issue.
llvm-svn: 122491
|
|
|
|
|
|
| |
multiple nodes per cycle.
llvm-svn: 122474
|
|
|
|
| |
llvm-svn: 122473
|
|
|
|
|
|
|
|
| |
In the bottom-up selection DAG scheduling, handle two-address
instructions that read/write unspillable registers. Treat
the entire chain of two-address nodes as a single live range.
llvm-svn: 122472
|
|
|
|
|
|
|
| |
new gcc warning that complains on self-assignments and
self-initializations.
llvm-svn: 122458
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
illegal. The latter usually compiles into smaller code.
example code:
unsigned foo(unsigned x, unsigned y) {
if (x != 0) y--;
return y;
}
before:
_foo: ## @foo
cmpl $1, 4(%esp) ## encoding: [0x83,0x7c,0x24,0x04,0x01]
sbbl %eax, %eax ## encoding: [0x19,0xc0]
notl %eax ## encoding: [0xf7,0xd0]
addl 8(%esp), %eax ## encoding: [0x03,0x44,0x24,0x08]
ret ## encoding: [0xc3]
after:
_foo: ## @foo
cmpl $1, 4(%esp) ## encoding: [0x83,0x7c,0x24,0x04,0x01]
movl 8(%esp), %eax ## encoding: [0x8b,0x44,0x24,0x08]
adcl $-1, %eax ## encoding: [0x83,0xd0,0xff]
ret ## encoding: [0xc3]
llvm-svn: 122455
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
loads properly. We miscompiled the testcase into:
_test: ## @test
movl $128, (%rdi)
movzbl 1(%rdi), %eax
ret
Now we get a proper:
_test: ## @test
movl $128, (%rdi)
movsbl (%rdi), %eax
movzbl %ah, %eax
ret
This fixes PR8757.
llvm-svn: 122392
|
|
|
|
|
|
| |
unhanded cases faster and simplify code.
llvm-svn: 122391
|
|
|
|
| |
llvm-svn: 122389
|
|
|
|
|
|
|
| |
the same physical register. Simplifies the fix from the previous
checkin r122211.
llvm-svn: 122370
|
|
|
|
| |
llvm-svn: 122368
|
|
|
|
|
|
|
|
| |
the shift type was needed one place, the shift count
type another. The transform in 123555 had the same
problem.
llvm-svn: 122366
|
|
|
|
| |
llvm-svn: 122360
|
|
|
|
| |
llvm-svn: 122355
|
|
|
|
|
|
|
|
| |
count operand. These should be the same but apparently are
not always, and this is cleaner anyway. This improves the
code in an existing test.
llvm-svn: 122354
|
|
|
|
| |
llvm-svn: 122353
|
|
|
|
| |
llvm-svn: 122349
|
|
|
|
| |
llvm-svn: 122345
|
|
|
|
| |
llvm-svn: 122342
|
|
|
|
|
|
|
| |
something that just glues two nodes together, even if it is
sometimes used for flags.
llvm-svn: 122310
|
|
|
|
|
|
| |
they are just as useless, but at least a bit more gramatical
llvm-svn: 122305
|
|
|
|
| |
llvm-svn: 122259
|
|
|
|
|
|
|
|
| |
ARM (and other 32-bit-only) targets support for i8 and i16 overflow
multiplies. The generated code isn't great, but this at least fixes
CodeGen/Generic/overflow.ll when running on ARM hosts.
llvm-svn: 122221
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Imagine we see:
EFLAGS = inst1
EFLAGS = inst2 FLAGS
gpr = inst3 EFLAGS
Previously, we would refuse to schedule inst2 because it clobbers
the EFLAGS of the predecessor. However, it also uses the EFLAGS
of the predecessor, so it is safe to emit. SDep edges ensure that
the right order happens already anyway.
This fixes 2 testsuite crashes with the X86 patch I'm going to
commit next.
llvm-svn: 122211
|
|
|
|
| |
llvm-svn: 122209
|
|
|
|
| |
llvm-svn: 122208
|
|
|
|
| |
llvm-svn: 122193
|
|
|
|
|
|
|
| |
enough to teach it that ADDE(0,0) is known 0 except the
low bit, for example.
llvm-svn: 122191
|
|
|
|
|
|
|
| |
isel is *required* to split the edge. PHI values get evaluated
on the edge, not in their predecessor block.
llvm-svn: 122170
|
|
|
|
|
|
|
| |
BUILD_VECTOR operands where the element type is not legal. I had previously
changed this code to insert TRUNCATE operations, but that was just wrong.
llvm-svn: 122102
|
|
|
|
|
|
|
| |
code for the case where 32-bit divide by constant is
turned into 64-bit multiply by constant. 8771012.
llvm-svn: 122090
|
|
|
|
|
|
| |
Radar 8776599
llvm-svn: 122018
|
|
|
|
|
|
| |
a wider mul if the wider mul is legal.
llvm-svn: 121848
|
|
|
|
|
|
| |
result, the top bits are truncated off anyway, just use SRL.
llvm-svn: 121846
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
when the wider type is legal. This allows us to compile:
define zeroext i16 @test1(i16 zeroext %x) nounwind {
entry:
%div = udiv i16 %x, 33
ret i16 %div
}
into:
test1: # @test1
movzwl 4(%esp), %eax
imull $63551, %eax, %eax # imm = 0xF83F
shrl $21, %eax
ret
instead of:
test1: # @test1
movw $-1985, %ax # imm = 0xFFFFFFFFFFFFF83F
mulw 4(%esp)
andl $65504, %edx # imm = 0xFFE0
movl %edx, %eax
shrl $5, %eax
ret
Implementing rdar://8760399 and example #4 from:
http://blog.regehr.org/archives/320
We should implement the same thing for [su]mul_hilo, but I don't
have immediate plans to do this.
llvm-svn: 121696
|
|
|
|
| |
llvm-svn: 121662
|
|
|
|
|
|
|
| |
catch this here rather than later after accessing uninitialized memory
etc. Fires when compiling the testcase in PR8237.
llvm-svn: 121635
|
|
|
|
|
|
| |
Necessary for byval support on ARM. Radar 7662569.
llvm-svn: 121412
|
|
|
|
| |
llvm-svn: 121356
|
|
|
|
| |
llvm-svn: 121293
|
|
|
|
|
|
|
|
| |
zextOrTrunc(), and APSInt methods extend(), extOrTrunc() and new method
trunc(), to be const and to return a new value instead of modifying the
object in place.
llvm-svn: 121120
|
|
|
|
|
|
| |
message instead of creating DBG_VALUE for undefined value in reg0.
llvm-svn: 121059
|
|
|
|
| |
llvm-svn: 120910
|
|
|
|
|
|
| |
setAllBits(), setBit(unsigned), etc.
llvm-svn: 120564
|
|
|
|
|
|
|
|
|
|
|
| |
legalization time. Since at legalization time there is no mapping from
SDNode back to the corresponding LLVM instruction and the return
SDNode is target specific, this requires a target hook to check for
eligibility. Only x86 and ARM support this form of sibcall optimization
right now.
rdar://8707777
llvm-svn: 120501
|
|
|
|
|
|
| |
and use this to disable a specific optimization. Patch by Micah Villmow!
llvm-svn: 120435
|
|
|
|
| |
llvm-svn: 120413
|