Jakob Stoklund Olesen
70ed924e18
Teach PHIElimination to handle <undef> operands.
...
When a PHI use is <undef>, don't emit a copy in the predecessor block,
but insert an IMPLICIT_DEF instruction instead. This ensures that
virtual register uses are always jointly dominated by defs, even if some
of them are IMPLICIT_DEF.
llvm-svn: 159121
2012-06-25 03:36:12 +00:00
Jakob Stoklund Olesen
6b556f824d
Handle <undef> operands in TwoAddressInstructionPass.
...
When the source register to a 2-addr instruction is undefined, there is
no need to attempt any transformations - simply replace the source
register with the destination register.
This also comes up when lowering IMPLICIT_DEF instructions - make sure
the <undef> flag is moved to the new partial register def operand:
%vreg8<def> = INSERT_SUBREG %vreg9<undef>, %vreg0<kill>, sub_16bit
rewrite undef:
%vreg8<def> = INSERT_SUBREG %vreg8<undef>, %vreg0<kill>, sub_16bit
convert to:
%vreg8:sub_16bit<def,read-undef> = COPY %vreg0<kill>
llvm-svn: 159120
2012-06-25 03:27:12 +00:00
Jakob Stoklund Olesen
2e22e6a361
%RCX is not a function live-out in eh.return functions.
...
The function live-out registers must be live at all function returns,
and %RCX is only used by eh.return. When a function also has a normal
return, only %RAX holds a return value.
This fixes PR13188.
llvm-svn: 159116
2012-06-24 15:53:01 +00:00
NAKAMURA Takumi
704de074b8
llvm/lib: [CMake] Add explicit dependency to intrinsics_gen.
...
llvm-svn: 159112
2012-06-24 13:32:01 +00:00
Hal Finkel
3099ce9489
Allow controlling vectorization of boolean values separately from other integer types.
...
These are used as the result of comparisons, and often handled differently from larger integer types.
llvm-svn: 159111
2012-06-24 13:28:01 +00:00
Nick Lewycky
0a045bbe4e
Remove dyn_cast + dereference pattern by replacing it with a cast and changing
...
the safety check to look for the same type we're going to actually cast to.
Fixes PR13180!
llvm-svn: 159110
2012-06-24 10:15:42 +00:00
Craig Topper
fd5e6e7db1
Remove intrinsic specific instructions for (V)CVTPS2DQ and replace with patterns.
...
llvm-svn: 159109
2012-06-24 07:07:16 +00:00
Craig Topper
b925230fb1
Remove intrinsic specific instructions for (V)CVTPS2DQ and replace with patterns.
...
llvm-svn: 159108
2012-06-24 06:55:37 +00:00
Craig Topper
f48ec7a708
Fix build failures from r159106.
...
llvm-svn: 159107
2012-06-24 06:08:31 +00:00
Craig Topper
bab2b89944
Remove intrinsic specific instructions for CVTPD2PS and replace with just patterns.
...
llvm-svn: 159106
2012-06-24 05:44:31 +00:00
Craig Topper
3cee08ce7d
Remove intrinsic specific instructions for CVTPD2DQ. Replace with patterns.
...
llvm-svn: 159105
2012-06-24 05:33:24 +00:00
Nick Lewycky
b74ae9c5b2
Tab to spaces. No functionality change.
...
llvm-svn: 159104
2012-06-24 04:07:14 +00:00
NAKAMURA Takumi
38f4c93837
llvm/lib/Support/Errno.cpp: [Win32] Fix usage of strerror_s().
...
FYI, two arguments of strerror_s() is provided in C++ on msvc.
llvm-svn: 159103
2012-06-24 03:51:04 +00:00
NAKAMURA Takumi
cca44e219f
VMCore/CMakeLists.txt: [CMake][MSVC] Add "/Og-" to Function.cpp on msvc10. Otherwise, it took over 20 minutes to compile.
...
FIXME: Suppressing optimizations to core libraries would not be good thing.
llvm-svn: 159097
2012-06-24 03:48:29 +00:00
Nick Lewycky
bfb07fb562
Remove a dangling reference to a deleted instruction. Fixes PR13185!
...
llvm-svn: 159096
2012-06-24 01:44:08 +00:00
Pete Cooper
3c680dec8a
Remove code i'd been testing with but didn't mean to commit. Oops
...
llvm-svn: 159094
2012-06-24 00:08:36 +00:00
Pete Cooper
fe212e762f
DAG legalisation can now handle illegal fma vector types by scalarisation
...
llvm-svn: 159092
2012-06-24 00:05:44 +00:00
Craig Topper
a899cc15f1
Remove intrinsic specific instructions for (V)CVTDQ2PS. Use a Pat instead instead.
...
llvm-svn: 159090
2012-06-23 22:33:14 +00:00
Hal Finkel
4b06b1a0ee
Allow BBVectorize to fuse compare instructions.
...
llvm-svn: 159088
2012-06-23 21:52:50 +00:00
Craig Topper
7e9415220a
Make CVTDQ2PS instruction use SSE2 predicate instead of SSE1. No functional change because there are no patterns in the instructions. Also fix a typo in a comment.
...
llvm-svn: 159087
2012-06-23 20:52:45 +00:00
Craig Topper
24e3418215
Move CVTPD2DQ to use SSE2 predicate instead of SSE3. Move DQ2PD and PD2DQ to the SSE2 section of the file.
...
llvm-svn: 159086
2012-06-23 20:15:42 +00:00
Benjamin Kramer
53ffe55a66
Add a microoptimization note.
...
llvm-svn: 159082
2012-06-23 15:19:31 +00:00
Hans Wennborg
ac9fb36c31
Clean-up after r159077.
...
Remove temporary GlobalVariable constructors now that Clang has been
updated (r159078).
llvm-svn: 159079
2012-06-23 12:14:23 +00:00
Hans Wennborg
cbe34b4cc9
Extend the IL for selecting TLS models (PR9788)
...
This allows the user/front-end to specify a model that is better
than what LLVM would choose by default. For example, a variable
might be declared as
@x = thread_local(initialexec) global i32 42
if it will not be used in a shared library that is dlopen'ed.
If the specified model isn't supported by the target, or if LLVM can
make a better choice, a different model may be used.
llvm-svn: 159077
2012-06-23 11:37:03 +00:00
Stepan Dyatkovskiy
8e00efeace
Optimized usage of new SwitchInst case values (IntegersSubset type) in Local.cpp, Execution.cpp and BitcodeWriter.cpp.
...
I got about 1% of compile-time improvement on my machines (Ubuntu 11.10 i386 and Ubuntu 12.04 x64).
llvm-svn: 159076
2012-06-23 10:58:58 +00:00
Craig Topper
8c03ea79c4
Use correct memory types for (V)CVTDQ2PD instructions.
...
llvm-svn: 159075
2012-06-23 08:30:27 +00:00
Craig Topper
2361cd9897
Silence an unused variable warning on release builds.
...
llvm-svn: 159074
2012-06-23 08:09:30 +00:00
Craig Topper
1cac50bc5e
Compress flags in X86 op folding to reduce space in static tables.
...
llvm-svn: 159073
2012-06-23 08:01:18 +00:00
Craig Topper
d9c7d0dda4
Make helper method static since it doesn't use anything in the class.
...
llvm-svn: 159071
2012-06-23 04:58:41 +00:00
Craig Topper
431f1e7192
Remove intrinsic specific instructions for 128-bit (V)CVTDQ2PD. Replace with intrinsic patterns. Mem forms omitted because the load size is only 64-bits.
...
llvm-svn: 159070
2012-06-23 04:23:36 +00:00
Jakob Stoklund Olesen
502e4c6ac4
Teach LiveVariables to handle <undef> operands.
...
It's simple: Don't treat <undef> operands as uses, and don't assume a
virtual register has a defining instruction unless a real use has been
seen.
llvm-svn: 159061
2012-06-23 02:23:00 +00:00
Rafael Espindola
a3088f09b3
Handle aliases to tls variables in all architectures, not just x86.
...
llvm-svn: 159058
2012-06-23 00:30:03 +00:00
Evan Cheng
68c2f9a9a7
(sub X, imm) gets canonicalized to (add X, -imm)
...
There are patterns to handle immediates when they fit in the immediate field.
e.g. %sub = add i32 %x, -123
=> sub r0, r0, #123
Add patterns to catch immediates that do not fit but should be materialized
with a single movw instruction rather than movw + movt pair.
e.g. %sub = add i32 %x, -65535
=> movw r1, #65535
sub r0, r0, r1
rdar://11726136
llvm-svn: 159057
2012-06-23 00:29:06 +00:00
Nuno Lopes
de8c6fb24f
BoundsChecking: attach debug info to traps to make my life a bit more sane
...
llvm-svn: 159055
2012-06-23 00:12:34 +00:00
Jim Grosbach
087affe2f3
ARM: Add a better diagnostic for some out of range immediates.
...
As an example of how the custom DiagnosticType can be used to provide
better operand-mismatch diagnostics, add a custom diagnostic for
the imm0_15 operand class used for several system instructions.
Update the tests to expect the improved diagnostic.
rdar://8987109
llvm-svn: 159051
2012-06-22 23:56:48 +00:00
Hal Finkel
460e94d842
Add support for the PPC isel instruction.
...
The isel (integer select) instruction is supported on the 440 and A2
embedded cores and on the POWER7.
llvm-svn: 159045
2012-06-22 23:10:08 +00:00
Jakob Stoklund Olesen
a127fc780a
Remove ProcessImplicitDefs.h which was unused.
...
The ProcessImplicitDefs class can be local to its implementation file.
llvm-svn: 159041
2012-06-22 22:27:36 +00:00
Jakob Stoklund Olesen
b033dede17
Also verify the def index for early clobbers.
...
llvm-svn: 159039
2012-06-22 22:23:58 +00:00
Chad Rosier
f5cdea3d79
Whitespace.
...
llvm-svn: 159035
2012-06-22 22:07:19 +00:00
Jakob Stoklund Olesen
4fa84ba8b9
Delete a boring statistic.
...
llvm-svn: 159030
2012-06-22 20:40:15 +00:00
Jakob Stoklund Olesen
c61edda0ab
Store live intervals in an IndexedMap.
...
It is both smaller and faster than DenseMap.
llvm-svn: 159029
2012-06-22 20:37:52 +00:00
Hal Finkel
8db5547252
Revert r158679 - use case is unclear (and it increases the memory footprint).
...
Original commit message:
Allow up to 64 functional units per processor itinerary.
This patch changes the type used to hold the FU bitset from unsigned to uint64_t.
This will be needed for some upcoming PowerPC itineraries.
llvm-svn: 159027
2012-06-22 20:27:13 +00:00
Evan Cheng
f5bd6c6510
EmitZerofill should take a 64-bit size or else it's chopping off large zero-filled global. rdar://11729134
...
llvm-svn: 159023
2012-06-22 20:14:46 +00:00
Jakob Stoklund Olesen
48828bb402
Fix a crash in --debug code.
...
Don't try to print out the live range of a physreg.
llvm-svn: 159021
2012-06-22 19:51:41 +00:00
Jakob Stoklund Olesen
48a1647c93
Don't depend on live ranges being present.
...
DBG_VALUE instructions could be referring to non-existing virtual
registers.
llvm-svn: 159020
2012-06-22 18:51:35 +00:00
Jakob Stoklund Olesen
8a833649e5
Simplify handleMove() a bit.
...
There is no need to check for physreg live ranges. They don't exist any
more.
llvm-svn: 159019
2012-06-22 18:38:57 +00:00
Jakob Stoklund Olesen
37e797fedc
Stop computing physreg live ranges.
...
Everyone is using on-demand regunit ranges now.
llvm-svn: 159018
2012-06-22 18:20:50 +00:00
Jakob Stoklund Olesen
bbad269a3e
Remove some redundant LIS->hasInterval() checks.
...
These functions only operate on virtual registers now, and they all have
live ranges.
llvm-svn: 159015
2012-06-22 17:49:44 +00:00
Jakob Stoklund Olesen
7809578cfe
Use MRI::isConstantPhysReg() to check remat feasibility.
...
Don't depend on LiveIntervals::hasInterval() to determine if a physreg
is reserved and constant.
llvm-svn: 159013
2012-06-22 17:31:01 +00:00
Jakob Stoklund Olesen
3244963ecc
Use regunit liveness to guide LiveDebugVariables.
...
This should produce the same results as using physreg liveness directly.
llvm-svn: 159009
2012-06-22 17:15:32 +00:00