Chris Lattner
69223bb7f5
fix a crash on a pointless but valid zero-length memset, rdar://6808691
...
llvm-svn: 69680
2009-04-21 16:52:12 +00:00
Anton Korobeynikov
f7d0c1a5e6
Silence warnings.
...
Patch by Jay Foad!
llvm-svn: 69679
2009-04-21 16:04:56 +00:00
Anton Korobeynikov
5a4b52dc0c
Drop obsolete reference to __eprintf.
...
Patch by Jay Foad!
llvm-svn: 69678
2009-04-21 16:04:41 +00:00
Duncan Sands
7ce5cc6bd1
Get rid of what looks like a copy-and-pasted typo.
...
Spotted by gcc-4.5.
llvm-svn: 69673
2009-04-21 09:44:39 +00:00
Rafael Espindola
47ed1f5293
TLS_addr64 and TLS_addr32 define RDI and EAX. They don't use them.
...
This fixes PR4002.
llvm-svn: 69672
2009-04-21 08:22:09 +00:00
Sanjiv Gupta
3e3ef7c4d9
Handle direct aggregate type arguments.
...
llvm-svn: 69665
2009-04-21 05:54:51 +00:00
Dan Gohman
0ec0537403
Teach ScalarEvolution how to recognize zext-inreg and sext-inreg,
...
as they appear in LLVM IR. This isn't particularly interesting
on its own; this is just setting up some infrastructure.
llvm-svn: 69655
2009-04-21 02:26:00 +00:00
Dan Gohman
c4938497b3
This FIXME is fixed, now that SCEV understands pointers.
...
llvm-svn: 69651
2009-04-21 01:41:18 +00:00
Dan Gohman
4860db61be
Factor out a common base class from SCEVTruncateExpr, SCEVZeroExtendExpr,
...
and SCEVSignExtendExpr.
llvm-svn: 69649
2009-04-21 01:25:57 +00:00
Dan Gohman
49e062fcc1
Usage getAnalysisToUpdate for TargetData, per PR760.
...
llvm-svn: 69645
2009-04-21 01:11:19 +00:00
Dan Gohman
b397e1a7a2
Introduce encapsulation for ScalarEvolution's TargetData object, and refactor
...
the code to minimize dependencies on TargetData.
llvm-svn: 69644
2009-04-21 01:07:12 +00:00
Dan Gohman
413e91f440
Move some assertion checks so they can do more complete checking.
...
llvm-svn: 69643
2009-04-21 00:55:22 +00:00
Dan Gohman
e20f824565
Convert ScalarEvolution to use raw_ostream instead of OStream.
...
llvm-svn: 69640
2009-04-21 00:47:46 +00:00
Devang Patel
7f413cb05f
Fix Visual Studio 2008 build failure.
...
Patch by Marius Wachtler
llvm-svn: 69637
2009-04-21 00:08:56 +00:00
Dan Gohman
1addf64735
Make X86's copyRegToReg able to handle copies to and from subclasses.
...
This makes the extra copyRegToReg calls in ScheduleDAGSDNodesEmit.cpp
unnecessary. Derived from a patch by Jakob Stoklund Olesen.
llvm-svn: 69635
2009-04-20 22:54:34 +00:00
Dan Gohman
e014b69919
Simplify this code. getConstant knows how to make
...
broadcasted vector constants.
llvm-svn: 69634
2009-04-20 22:51:43 +00:00
Dale Johannesen
1238220473
Adjust loop size estimate for full unrolling;
...
GEP's don't usually become instructions.
llvm-svn: 69631
2009-04-20 22:19:33 +00:00
Daniel Dunbar
3222b9be04
Make Unix.h:MakeErrMsg separate the prefix and errno string, so we get:
...
clang: error: unable to make temporary file: /etc/cc: can't make
unique filename: Permission denied
instead of
clang: error: unable to make temporary file: /etc/cc: can't make
unique filenamePermission denied
for example.
Also, audited the uses of MakeErrMsg to make the prefix strings
consistent (not end with newline/punctuation/space/": ").
llvm-svn: 69626
2009-04-20 20:50:13 +00:00
Daniel Dunbar
2c441c6afe
Remove unused variable.
...
llvm-svn: 69624
2009-04-20 20:34:38 +00:00
Bob Wilson
f8b85477ae
Move duplicated AddLiveIn function from X86 and ARM backends to be a method
...
in the MachineFunction class, renaming it to addLiveIn for consistency with
the same method in MachineBasicBlock. Thanks for Anton for suggesting this.
llvm-svn: 69615
2009-04-20 18:36:57 +00:00
Devang Patel
958d5eb032
Match C backend only if it explicitly requested.
...
llvm-svn: 69613
2009-04-20 18:07:22 +00:00
Bob Wilson
da188ebbbd
Revise my previous change 68996 as suggested by Duncan.
...
llvm-svn: 69607
2009-04-20 17:27:09 +00:00
Evan Cheng
5dd2e29b67
- Remove an arbitrary spill weight tweak that should not have been there.
...
- Find more reloads from SS.
llvm-svn: 69606
2009-04-20 17:23:48 +00:00
Sanjiv Gupta
0fcc019d36
Emit the auto variables of a function into a different section than parameters.
...
llvm-svn: 69605
2009-04-20 16:59:35 +00:00
Dan Gohman
f7db87f2dc
It's not necessary for PrintModulePass to flush the output streams
...
now that errs() is properly non-buffered.
llvm-svn: 69602
2009-04-20 16:26:25 +00:00
Dan Gohman
6c7a485c19
Don't discard an AssemblyAnnotationWriter when writing GlobalValues,
...
which include Functions, where it can be quite useful to use an
AssemblyAnnotationWriter.
llvm-svn: 69598
2009-04-20 16:10:33 +00:00
Dan Gohman
5fe6b530a5
Implement operator<<(raw_ostream &OS, const Type &T).
...
llvm-svn: 69596
2009-04-20 15:55:38 +00:00
Evan Cheng
d67efaa847
Added a linearscan register allocation optimization. When the register allocator spill an interval with multiple uses in the same basic block, it creates a different virtual register for each of the reloads. e.g.
...
%reg1498<def> = MOV32rm %reg1024, 1, %reg0, 12, %reg0, Mem:LD(4,4) [sunkaddr39 + 0]
%reg1506<def> = MOV32rm %reg1024, 1, %reg0, 8, %reg0, Mem:LD(4,4) [sunkaddr42 + 0]
%reg1486<def> = MOV32rr %reg1506
%reg1486<def> = XOR32rr %reg1486, %reg1498, %EFLAGS<imp-def,dead>
%reg1510<def> = MOV32rm %reg1024, 1, %reg0, 4, %reg0, Mem:LD(4,4) [sunkaddr45 + 0]
=>
%reg1498<def> = MOV32rm %reg2036, 1, %reg0, 12, %reg0, Mem:LD(4,4) [sunkaddr39 + 0]
%reg1506<def> = MOV32rm %reg2037, 1, %reg0, 8, %reg0, Mem:LD(4,4) [sunkaddr42 + 0]
%reg1486<def> = MOV32rr %reg1506
%reg1486<def> = XOR32rr %reg1486, %reg1498, %EFLAGS<imp-def,dead>
%reg1510<def> = MOV32rm %reg2038, 1, %reg0, 4, %reg0, Mem:LD(4,4) [sunkaddr45 + 0]
From linearscan's point of view, each of reg2036, 2037, and 2038 are separate registers, each is "killed" after a single use. The reloaded register is available and it's often clobbered right away. e.g. In thise case reg1498 is allocated EAX while reg2036 is allocated RAX. This means we end up with multiple reloads from the same stack slot in the same basic block.
Now linearscan recognize there are other reloads from same SS in the same BB. So it'll "downgrade" RAX (and its aliases) after reg2036 is allocated until the next reload (reg2037) is done. This greatly increase the likihood reloads from SS are reused.
This speeds up sha1 from OpenSSL by 5.8%. It is also an across the board win for SPEC2000 and 2006.
llvm-svn: 69585
2009-04-20 08:01:12 +00:00
Douglas Gregor
b231e5791e
Make all raw_ostreams support the tell() function.
...
llvm-svn: 69583
2009-04-20 07:34:17 +00:00
Sanjiv Gupta
428d490332
Before trying to introduce/eliminate cast/ext/trunc to make indices type as
...
pointer type, make sure that the pointer size is a valid sequential index type.
llvm-svn: 69574
2009-04-20 06:05:54 +00:00
Nick Lewycky
0575dbb692
Use an AssertingVH to detect the case where the Function was deleted but
...
freeMachineCodeForFunction was never called.
llvm-svn: 69531
2009-04-19 18:32:03 +00:00
Duncan Sands
f2e7133d34
Now that BUILD_VECTOR operands are allowed to be
...
bigger than the vector element type, turn checking
of the operand type back on again, appropriately
adjusted.
llvm-svn: 69516
2009-04-19 06:40:30 +00:00
Chris Lattner
7b01e66443
Fix PR3898, which manifests as failures on are an Xcore,
...
patch by Jakob Stoklund Olesen!
llvm-svn: 69472
2009-04-18 20:48:07 +00:00
Duncan Sands
e4ff21ba4b
Don't try to make BUILD_VECTOR operands have the same
...
type as the vector element type: allow them to be of
a wider integer type than the element type all the way
through the system, and not just as far as LegalizeDAG.
This should be safe because it used to be this way
(the old type legalizer would produce such nodes), so
backends should be able to handle it. In fact only
targets which have legal vector types with an illegal
promoted element type will ever see this (eg: <4 x i16>
on ppc). This fixes a regression with the new type
legalizer (vec_splat.ll). Also, treat SCALAR_TO_VECTOR
the same as BUILD_VECTOR. After all, it is just a
special case of BUILD_VECTOR.
llvm-svn: 69467
2009-04-18 20:16:54 +00:00
Dan Gohman
31efa3098f
Add a ScalarEvolution::getCouldNotCompute() function, and use it
...
instead of allocating and leaking new SCEVCouldNotCompute objects.
llvm-svn: 69452
2009-04-18 17:58:19 +00:00
Dan Gohman
927e90c716
More const qualifiers.
...
llvm-svn: 69451
2009-04-18 17:57:20 +00:00
Dan Gohman
056857aa21
Use more const qualifiers with SCEV interfaces.
...
llvm-svn: 69450
2009-04-18 17:56:28 +00:00
Evan Cheng
b685be0c1e
Add a new LiveInterval::overlaps(). It checks if the live interval overlaps a range specified by [Start, End).
...
llvm-svn: 69434
2009-04-18 08:52:15 +00:00
Mon P Wang
6c8bcf9da1
Fixed a few 64 bit cases in X86InstrInfo::commuteInstruction
...
llvm-svn: 69417
2009-04-18 05:16:01 +00:00
Dale Johannesen
ad968ee286
Inline asm's were still introducing bogus dependencies;
...
my earlier patch to this code only fixed half of it.
llvm-svn: 69408
2009-04-18 00:09:40 +00:00
Jim Grosbach
8d62763779
remove trailing whitespace
...
llvm-svn: 69402
2009-04-17 23:30:55 +00:00
Bill Wendling
06684350c4
Recommit r69335 and r69336. These were not causing problems.
...
llvm-svn: 69394
2009-04-17 22:40:38 +00:00
Bob Wilson
b0b10f8bf6
Move the AddLiveIn function definition closer to its uses.
...
llvm-svn: 69382
2009-04-17 20:42:34 +00:00
Bob Wilson
deeaf70dad
Rearrange code to reduce indentation.
...
llvm-svn: 69381
2009-04-17 20:40:45 +00:00
Bob Wilson
ea09d4aca8
Clean up formatting, remove trailing whitespace, fix comment typos and
...
punctuation. No functional changes.
llvm-svn: 69378
2009-04-17 20:35:10 +00:00
Bob Wilson
a4c2290e5f
Use CallConvLower.h and TableGen descriptions of the calling conventions
...
for ARM. Patch by Sandeep Patel.
llvm-svn: 69371
2009-04-17 19:07:39 +00:00
David Greene
22fa407ed7
Use a safer iterator interface and get rid of std C++ library misuse.
...
This fixes a --enable-expensive-checks problem.
llvm-svn: 69353
2009-04-17 14:56:18 +00:00
Rafael Espindola
355fe12c82
For general dynamic TLS access we must use
...
leaq foo@TLSGD(%rip), %rdi
as part of the instruction sequence. Using a register other than %rdi and then
copying it to %rdi is not valid.
llvm-svn: 69350
2009-04-17 14:35:58 +00:00
Bill Wendling
30527b1114
Revert r69335 and r69336. They were causing build failures.
...
llvm-svn: 69347
2009-04-17 04:19:22 +00:00
Dan Gohman
d2d6fd806c
Don't create ConstantInts with pointer type. This fixes a
...
regression in 403.gcc in PIC_CODEGEN=1 and DISABLE_LTO=1
mode.
llvm-svn: 69344
2009-04-17 02:02:52 +00:00
Evan Cheng
b96a1082a9
Teach spiller to unfold instructions which modref spill slot when a scratch
...
register is available and when it's profitable.
e.g.
xorq %r12<kill>, %r13
addq %rax, -184(%rbp)
addq %r13, -184(%rbp)
==>
xorq %r12<kill>, %r13
movq -184(%rbp), %r12
addq %rax, %r12
addq %r13, %r12
movq %r12, -184(%rbp)
Two more instructions, but fewer memory accesses. It can also open up
opportunities for more optimizations.
llvm-svn: 69341
2009-04-17 01:29:40 +00:00
Dan Gohman
09dbb0b5e0
MOV8rr_NOREX is a "Move" instruction. This doesn't currently
...
matter, because this instruction isn't generated until after
things that care.
llvm-svn: 69336
2009-04-17 00:45:17 +00:00
Dan Gohman
74835ce1cb
Don't use MOV8rr_NOREX on x86-32. It doesn't actually hurt anything at
...
present, but it's inconsistent.
llvm-svn: 69335
2009-04-17 00:43:09 +00:00
Chris Lattner
a8919d0a35
Fix some failures in targets on available_externally functions,
...
this fixes a crash on CodeGen/Generic/externally_available.ll
on ppc hosts. Thanks to Nicholas L for pointing this out.
llvm-svn: 69333
2009-04-17 00:26:12 +00:00
Dan Gohman
fec1d086e0
Use TargetData::getTypeSizeInBits instead of getPrimitiveSizeInBits()
...
to get the correct answer for pointer types.
llvm-svn: 69321
2009-04-16 22:35:57 +00:00
Chris Lattner
11ceb38df0
make sure to unlock keymgr if the JIT is created and destroyed, all
...
locks must be matched with unlocks. Also, use calloc to allocate the
block so that it is properly zero'd. Thanks to Nick Kledzik for
tracking this down.
llvm-svn: 69314
2009-04-16 21:47:59 +00:00
Eli Friedman
929207fd1d
Fix for PR3944: make mem2reg O(N) instead of O(N^2) in the number of
...
incoming edges for a block with many predecessors.
llvm-svn: 69312
2009-04-16 21:40:28 +00:00
Dan Gohman
72dc8452a3
Handle a pointer type correctly in SCEVExpander::visitAddRecExpr.
...
llvm-svn: 69310
2009-04-16 21:34:54 +00:00
Dan Gohman
eefba6bbe0
In the list-burr's pseudo two-addr dependency heuristics, don't
...
add dependencies on nodes with exactly one successor which is a
COPY_TO_REGCLASS node. In the case that the copy is coalesced
away, the dependence should be on the user of the copy, rather
than the copy itself.
llvm-svn: 69309
2009-04-16 20:59:02 +00:00
Dan Gohman
3027bb6953
Handle SUBREG_TO_REG instructions with the same heuristics
...
as INSERT_SUBREG instructions in the list-burr scheduler.
llvm-svn: 69308
2009-04-16 20:57:10 +00:00
Dan Gohman
c1c2ba7a72
Fix a bug with inttoptr/ptrtoint casts where the pointer has a different
...
size from the integer, requiring zero extension or truncation. Don't
create ZExtInsts with pointer types. This fixes a regression in
consumer-jpeg.
llvm-svn: 69307
2009-04-16 19:25:55 +00:00
Devang Patel
dab01f3fd6
Do not treat beginning of inlined scope as beginning of normal function scope if the location info is missing.
...
Insetad of doing ...
if (inlined_subroutine && known_location)
DW_TAG_inline_subroutine
else
DW_TAG_subprogram
do
if (inlined_subroutine) {
if (known_location)
DW_TAG_inline_subroutine
} else {
DW_TAG_subprogram
}
llvm-svn: 69300
2009-04-16 17:55:30 +00:00
Dan Gohman
8b6ebb1112
Minor code simplifications. Don't attempt LSR on theoretical
...
targets with pointers larger than 64 bits, due to the code not
yet being APInt clean.
llvm-svn: 69296
2009-04-16 16:49:48 +00:00
Dan Gohman
e2ead2c328
LSR is no longer a GEP optimizer. It is now an IV expression
...
optimizer, which just happen to frequently involve optimizing GEPs.
llvm-svn: 69295
2009-04-16 16:46:01 +00:00
Dan Gohman
e98ead45e2
Fix SCEVExpander::visitSMaxExpr and SCEVExpander::visitUMaxExpr to
...
not create ICmpInsts with operands of different types. This fixes
a regression in Applications/d/make_dparser.
llvm-svn: 69294
2009-04-16 16:15:25 +00:00
Dan Gohman
66e038a3e3
Teach SCEVExpander::InsertCastOfTo to avoid creating inttoptr-of-ptrtoint
...
and ptrtoint-of-inttoptr expressions. This fixes a regression in 300.twolf.
llvm-svn: 69293
2009-04-16 15:52:57 +00:00
Dan Gohman
a8be04b2db
Use ConstantExpr::getIntToPtr instead of SCEVExpander::InsertCastOfTo,
...
since the operand is always a constant.
llvm-svn: 69291
2009-04-16 15:48:38 +00:00
Dan Gohman
71bccd3e0e
Use a SCEV expression cast instead of immediately inserting a
...
new instruction with SCEVExpander::InsertCastOfTo.
llvm-svn: 69290
2009-04-16 15:47:35 +00:00
Devang Patel
9ac4390bf4
Record line number at the beginning of a func.start.
...
This line was accidently lost yesterday.
llvm-svn: 69286
2009-04-16 15:07:09 +00:00
Rafael Espindola
5e42177a0f
fix PR3995. A scale must be 1, 2, 4 or 8.
...
llvm-svn: 69284
2009-04-16 12:34:53 +00:00
Dan Gohman
0a40ad93a9
Expand GEPs in ScalarEvolution expressions. SCEV expressions can now
...
have pointer types, though in contrast to C pointer types, SCEV
addition is never implicitly scaled. This not only eliminates the
need for special code like IndVars' EliminatePointerRecurrence
and LSR's own GEP expansion code, it also does a better job because
it lets the normal optimizations handle pointer expressions just
like integer expressions.
Also, since LLVM IR GEPs can't directly index into multi-dimensional
VLAs, moving the GEP analysis out of client code and into the SCEV
framework makes it easier for clients to handle multi-dimensional
VLAs the same way as other arrays.
Some existing regression tests show improved optimization.
test/CodeGen/ARM/2007-03-13-InstrSched.ll in particular improved to
the point where if-conversion started kicking in; I turned it off
for this test to preserve the intent of the test.
llvm-svn: 69258
2009-04-16 03:18:22 +00:00
Devang Patel
653dee0884
In -fast mode do what FastISel does.
...
This code could use some refactoring help!
llvm-svn: 69254
2009-04-16 02:33:41 +00:00
Devang Patel
46b04e4d06
If FastISel is run and it has known DebugLoc then use it.
...
llvm-svn: 69253
2009-04-16 01:33:10 +00:00
Devang Patel
43fc7e481b
If location where the function was inlined is not know then do not emit debug info describing inlinied region.
...
llvm-svn: 69252
2009-04-16 01:31:54 +00:00
Dale Johannesen
a71daa83c6
Eliminate zext over (iv | const) or (signed iv),
...
and sext over (iv | const), if a longer iv is
available. Allow expressions to have more than
one zext/sext parent. All from OpenSSL.
llvm-svn: 69241
2009-04-15 23:31:51 +00:00
Devang Patel
31043aa200
s/RootDbgScope/FunctionDbgScope/g
...
llvm-svn: 69216
2009-04-15 20:41:31 +00:00
Dale Johannesen
82230b5b17
Eliminate zext over (iv & const) or ((iv+const)&const)
...
if a longer iv is available. These subscript forms are
not common; they're a bottleneck in OpenSSL.
llvm-svn: 69215
2009-04-15 20:41:02 +00:00
Chris Lattner
baf9535284
teach EscapeString and UnescapeString to handle ".
...
llvm-svn: 69211
2009-04-15 20:12:52 +00:00
Devang Patel
2738d7312a
Add DISubprogram is not null check.
...
This fixes test/CodeGen//2009-01-21-invalid-debug-info.m test case.
llvm-svn: 69210
2009-04-15 20:11:08 +00:00
Dan Gohman
8aa28b9c34
Generalize one of the SelectionDAG::ReplaceAllUsesWith overloads
...
to support replacing a node with another that has a superset of
the result types. Use this instead of calling
ReplaceAllUsesOfValueWith for each value.
llvm-svn: 69209
2009-04-15 20:06:30 +00:00
Dan Gohman
de7b3e74be
Fix 80-column violations.
...
llvm-svn: 69204
2009-04-15 19:48:57 +00:00
Dan Gohman
6711216e84
Add a folding table entry for MOV8rr_NOREX.
...
llvm-svn: 69203
2009-04-15 19:48:28 +00:00
Devang Patel
70307db0d5
Check isInlinedSubroutine() before creating DW_TAG_inlined_subroutine.
...
llvm-svn: 69202
2009-04-15 19:42:57 +00:00
Dan Gohman
37608532c4
Fix MachineInstr::getNumExplicitOperands to count
...
variadic operands correctly. Patch by Jakob Stoklund Olesen!
llvm-svn: 69190
2009-04-15 17:59:11 +00:00
Nick Lewycky
4a7bcf6410
Limit the number of times we're willing to chase pointers. Removes an O(n^2)
...
problem from instcombine.
llvm-svn: 69151
2009-04-15 06:23:41 +00:00
Dan Gohman
6f873b446a
Fix X86MachineFunctionInfo's doxygen comment.
...
llvm-svn: 69127
2009-04-15 01:20:18 +00:00
Dan Gohman
210448c233
Move MachineRegisterInfo::setRegClass out of line.
...
llvm-svn: 69126
2009-04-15 01:19:35 +00:00
Dan Gohman
505065cdd0
Move MachineJumpTableInfo::ReplaceMBBInJumpTables out of line.
...
llvm-svn: 69125
2009-04-15 01:18:49 +00:00
Dan Gohman
89892b05c7
Give RemoveRegOperandFromRegInfo a comment and move the
...
code out of line.
llvm-svn: 69124
2009-04-15 01:17:37 +00:00
Dale Johannesen
7ffb7d5728
Enhance induction variable code to remove the
...
sext around sext(shorter IV + constant), using a
longer IV instead, when it can figure out the
add can't overflow. This comes up a lot in
subscripting; mainly affects 64 bit.
llvm-svn: 69123
2009-04-15 01:10:12 +00:00
Evan Cheng
ffb83a155e
Avoid making the transformation enabled by my last patch if the new destinations have phi nodes.
...
llvm-svn: 69121
2009-04-15 00:43:54 +00:00
Devang Patel
046bf624b9
While inlining, clone llvm.dbg.func.start intrinsic and adjust
...
llvm.dbg.region.end instrinsic. This nested llvm.dbg.func.start/llvm.dbg.region.end pair now enables DW_TAG_inlined_subroutine support in code generator.
llvm-svn: 69118
2009-04-15 00:17:06 +00:00
Devang Patel
32d17a1a29
Construct and emit DW_TAG_inlined_subroutine DIEs for inlined subroutine scopes (only in FastISel mode).
...
llvm-svn: 69116
2009-04-15 00:10:26 +00:00
Dan Gohman
dd07f638f5
Do for GR16_NOREX what r69049 did for GR8_NOREX, to avoid trouble with
...
the local register allocator.
llvm-svn: 69115
2009-04-15 00:10:16 +00:00
Devang Patel
1be3b53d3c
Add a method to check that the subprogram holds debug info for the given Function or not.
...
llvm-svn: 69113
2009-04-15 00:06:07 +00:00
Dan Gohman
7913ea5e4a
Add a new MOV8rr_NOREX, and make X86's copyRegToReg use it when
...
either the source or destination is a physical h register.
This fixes sqlite3 with the post-RA scheduler enabled.
llvm-svn: 69111
2009-04-15 00:04:23 +00:00
Dan Gohman
821e13a8f4
GR8_NOREX can contain the H registers, since they don't require
...
REX prefixes.
llvm-svn: 69108
2009-04-15 00:00:48 +00:00
Evan Cheng
5ebf2acd84
Optimize conditional branch on i1 phis with non-constant inputs.
...
This turns:
eq:
%3 = icmp eq i32 %1, %2
br label %join
ne:
%4 = icmp ne i32 %1, %2
br label %join
join:
%5 = phi i1 [%3, %eq], [%4, %ne]
br i1 %5, label %yes, label %no
=>
eq:
%3 = icmp eq i32 %1, %2
br i1 %3, label %yes, label %no
ne:
%4 = icmp ne i32 %1, %2
br i1 %4, label %yes, label %no
llvm-svn: 69102
2009-04-14 23:40:03 +00:00
Dan Gohman
62f4498646
For the h-register addressing-mode trick, use the correct value for
...
any non-address uses of the address value. This fixes 186.crafty.
llvm-svn: 69094
2009-04-14 22:45:05 +00:00
Evan Cheng
3f1a3008f4
Mac OS X 10.6 and above do not use key manager to register EH frames.
...
llvm-svn: 69090
2009-04-14 22:31:59 +00:00