Tom Stellard
d33d7f15a2
R600/SI: Replace TRI->getRegClass(Reg) with TRI->getPhysRegClass(Reg)
...
TRI->getRegClass() takes a register class ID, not a register. We were
using this incorrectly in a few places.
llvm-svn: 237132
2015-05-12 14:18:11 +00:00
Benjamin Kramer
799003bf8c
Re-sort includes with sort-includes.py and insert raw_ostream.h where it's used.
...
llvm-svn: 232998
2015-03-23 19:32:43 +00:00
Tom Stellard
7b3aa88ac1
R600/SI: Fix asam errors in SIFoldOperands
...
We were trying to fold into implicit uses, which led to out of bounds
access of the MCInstrDesc::OpInfo arrray.
llvm-svn: 229533
2015-02-17 20:11:54 +00:00
Matt Arsenault
95546b46ab
R600/SI: Fix phys reg copies in SIFoldOperands
...
llvm-svn: 229227
2015-02-14 02:55:57 +00:00
Matt Arsenault
11a4d6774b
R600/SI: Allow f64 inline immediates in i64 operands
...
This requires considering the size of the operand when
checking immediate legality.
llvm-svn: 229135
2015-02-13 19:05:03 +00:00
Matt Arsenault
25f61a6f89
Fix typo
...
llvm-svn: 227697
2015-01-31 23:37:27 +00:00
Tom Stellard
fb77f00be8
R600/SI: Add pattern for bitcasting fp immediates to integers
...
The backend now assumes that all immediates are integers. This allows
us to simplify immediate handling code, becasue we no longer need to
handle fp and integer immediates differently.
llvm-svn: 225844
2015-01-13 22:59:41 +00:00
Tom Stellard
0599297cb4
R600/SI: Commute instructions to enable more folding opportunities
...
llvm-svn: 225410
2015-01-07 22:44:19 +00:00
Tom Stellard
26cc18df43
R600/SI: Only fold immediates that have one use
...
Folding the same immediate into multiple instruction will increase
program size, which can hurt performance.
llvm-svn: 225405
2015-01-07 22:18:27 +00:00
Tom Stellard
4842c05216
R600/SI: Add a V_MOV_B64 pseudo instruction
...
This is used to simplify the SIFoldOperands pass and make it easier to
fold immediates.
llvm-svn: 225373
2015-01-07 20:27:25 +00:00
Tom Stellard
ef3b864a07
R600/SI: Teach SIFoldOperands to split 64-bit constants when folding
...
This allows folding of sequences like:
s[0:1] = s_mov_b64 4
v_add_i32 v0, s0, v0
v_addc_u32 v1, s1, v1
into
v_add_i32 v0, 4, v0
v_add_i32 v1, 0, v1
llvm-svn: 225369
2015-01-07 19:56:17 +00:00
Tom Stellard
bb763e6b47
R600/SI: Refactor SIFoldOperands to simplify immediate folding
...
This will make a future patch much less intrusive.
llvm-svn: 225358
2015-01-07 17:42:16 +00:00
Tom Stellard
6596ba7933
R600/SI: Add SIFoldOperands pass
...
This pass attempts to fold the source operands of mov and copy
instructions into their uses.
llvm-svn: 222581
2014-11-21 22:06:37 +00:00