| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
|
| |
This saves a second compare and an and / or by using
the unordered comparison instructions.
llvm-svn: 224066
|
|
|
|
| |
llvm-svn: 224065
|
|
|
|
|
|
|
|
| |
This fixes an issue with ScheduleDAGInstrs::buildSchedGraph
where stores without an underlying object would not be added
as a predecessor to the current BarrierChain.
llvm-svn: 223717
|
|
|
|
|
|
| |
This was changed in r223323.
llvm-svn: 223579
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Select i1 logical ops directly to 64-bit SALU instructions.
Vector i1 values are always really in SGPRs, with each
bit for each item in the wave. This saves about 4 instructions
when and/or/xoring any condition, and also helps write conditions
that need to be passed in vcc.
This should work correctly now that the SGPR live range
fixing pass works. More work is needed to eliminate the VReg_1
pseudo regclass and possibly the entire SILowerI1Copies pass.
llvm-svn: 223206
|
|
|
|
|
|
|
|
| |
We just needed to remove the assertion in
AMDGPURegisterInfo::getFrameRegister(), which is called when
initializing the parser for inline assembly.
llvm-svn: 223197
|
|
|
|
|
|
| |
This matches SC's behavior.
llvm-svn: 223194
|
|
|
|
| |
llvm-svn: 223154
|
|
|
|
| |
llvm-svn: 223151
|
|
|
|
| |
llvm-svn: 223125
|
|
|
|
|
|
|
| |
This was trying to create an MVT with 3x vectors which
created an invalid EVT
llvm-svn: 222942
|
|
|
|
| |
llvm-svn: 222631
|
|
|
|
| |
llvm-svn: 222629
|
|
|
|
|
|
| |
Use -LABEL and remove -CHECK
llvm-svn: 222628
|
|
|
|
| |
llvm-svn: 222627
|
|
|
|
| |
llvm-svn: 222585
|
|
|
|
|
|
|
|
|
|
|
|
| |
This s_mov_b32 will write to a virtual register from the M0Reg
class and all the ds instructions now take an extra M0Reg explicit
argument.
This change is necessary to prevent issues with the scheduler
mixing together instructions that expect different values in the m0
registers.
llvm-svn: 222583
|
|
|
|
|
|
|
| |
This pass attempts to fold the source operands of mov and copy
instructions into their uses.
llvm-svn: 222581
|
|
|
|
| |
llvm-svn: 222578
|
|
|
|
|
|
|
|
|
|
|
|
| |
A register operand that has a common sub-class with its instruction's
defined register class is not always legal. For example,
SReg_32 and M0Reg both have a common sub-class, but we can't
use an SReg_32 in instructions that expect a M0Reg.
This prevents the llvm.SI.sendmsg.ll test from failing when the fold
operand pass is added.
llvm-svn: 222368
|
|
|
|
|
|
|
|
|
| |
This partially makes up for not having address spaces
used for alias analysis in some simple cases.
This is not yet enabled by default so shouldn't change anything yet.
llvm-svn: 222286
|
|
|
|
|
|
|
|
|
|
|
|
| |
This should expose more of the actually used VALU
instructions to the machine optimization passes.
This also should help getting i1 handling into a better state.
For not entirly understood reasons, this fixes the split-scalar-i64-add.ll
test where a 64-bit add would only partially be moved to the VALU
resulting in use of undefined VCC.
llvm-svn: 222256
|
|
|
|
| |
llvm-svn: 222253
|
|
|
|
|
|
|
|
|
|
| |
This gets the correct NaN behavior based on the compare type
the hardware uses. This now passes the new piglit test I have
for this on SI.
Add stricter tests for the operand order.
llvm-svn: 222079
|
|
|
|
|
|
|
|
|
|
| |
If we have spilled the value of the m0 register, then we need to restore
it with v_readlane_b32 to a regular sgpr, because v_readlane_b32 can't
write to m0.
v_readlane_b32 can't write to m0, so
llvm-svn: 222036
|
|
|
|
| |
llvm-svn: 222032
|
|
|
|
|
|
| |
SIILowerI1Copies wasn't correctly handling this case.
llvm-svn: 222020
|
|
|
|
| |
llvm-svn: 222015
|
|
|
|
| |
llvm-svn: 222012
|
|
|
|
|
|
| |
select_cc is expanded on SI, so this was never matched.
llvm-svn: 221941
|
|
|
|
| |
llvm-svn: 221922
|
|
|
|
|
|
|
|
| |
If a function is just an unreachable, this would hit a
"this is not a MachO target" assertion because of setting
HasSubsectionViaSymbols.
llvm-svn: 221920
|
|
|
|
|
|
| |
Also give a proper error for other address spaces.
llvm-svn: 221917
|
|
|
|
|
|
|
| |
It's not necessary. Also use complex patterns to allow
src modifier usage.
llvm-svn: 221916
|
|
|
|
| |
llvm-svn: 221911
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
e.g. v_mad_f32 a, b, c -> v_mad_f32 b, a, c
This simplifies matching v_madmk_f32.
This looks somewhat surprising, but it appears to be
OK to do this. We can commute src0 and src1 in all
of these instructions, and that's all that appears
to matter.
llvm-svn: 221910
|
|
|
|
| |
llvm-svn: 221565
|
|
|
|
| |
llvm-svn: 221384
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This matches the format produced by the AMD proprietary driver.
//==================================================================//
// Shell script for converting .ll test cases: (Pass the .ll files
you want to convert to this script as arguments).
//==================================================================//
; This was necessary on my system so that A-Z in sed would match only
; upper case. I'm not sure why.
export LC_ALL='C'
TEST_FILES="$*"
MATCHES=`grep -v Patterns SIInstructions.td | grep -o '"[A-Z0-9_]\+["e]' | grep -o '[A-Z0-9_]\+' | sort -r`
for f in $TEST_FILES; do
# Check that there are SI tests:
grep -q -e 'verde' -e 'bonaire' -e 'SI' -e 'tahiti' $f
if [ $? -eq 0 ]; then
for match in $MATCHES; do
sed -i -e "s/\([ :]$match\)/\L\1/" $f
done
# Try to get check lines with partial instruction names
sed -i 's/\(;[ ]*SI[A-Z\\-]*: \)\([A-Z_0-9]\+\)/\1\L\2/' $f
fi
done
sed -i -e 's/bb0_1/BB0_1/g' ../../../test/CodeGen/R600/infinite-loop.ll
sed -i -e 's/SI-NOT: bfe/SI-NOT: {{[^@]}}bfe/g'../../../test/CodeGen/R600/llvm.AMDGPU.bfe.*32.ll ../../../test/CodeGen/R600/sext-in-reg.ll
sed -i -e 's/exp_IEEE/EXP_IEEE/g' ../../../test/CodeGen/R600/llvm.exp2.ll
sed -i -e 's/numVgprs/NumVgprs/g' ../../../test/CodeGen/R600/register-count-comments.ll
sed -i 's/\(; CHECK[-NOT]*: \)\([A-Z_0-9]\+\)/\1\L\2/' ../../../test/CodeGen/R600/select64.ll ../../../test/CodeGen/R600/sgpr-copy.ll
//==================================================================//
// Shell script for converting .td files (run this last)
//==================================================================//
export LC_ALL='C'
sed -i -e '/Patterns/!s/\("[A-Z0-9_]\+[ "e]\)/\L\1/g' SIInstructions.td
sed -i -e 's/"EXP/"exp/g' SIInstrInfo.td
llvm-svn: 221350
|
|
|
|
| |
llvm-svn: 221349
|
|
|
|
|
|
|
|
| |
Function calls aren't supported yet.
This was reverted due to build breakages, which should be fixed now.
llvm-svn: 221173
|
|
|
|
|
|
|
|
|
| |
This reverts commit r220996.
It introduced layering violations causing link errors in many
configurations.
llvm-svn: 221020
|
|
|
|
|
|
|
|
| |
We need to figure out how to track ptrtoint values all the
way until result is converted back to a pointer in order
to correctly rewrite the pointer type.
llvm-svn: 220997
|
|
|
|
|
|
| |
Function calls aren't supported yet.
llvm-svn: 220996
|
|
|
|
|
|
| |
It's not handling phis.
llvm-svn: 220371
|
|
|
|
|
|
|
| |
This fails the verifier with:
"Expected a VCSrc_32 register, but got a VReg_1 register"
llvm-svn: 220368
|
|
|
|
| |
llvm-svn: 220342
|
|
|
|
| |
llvm-svn: 220338
|
|
|
|
|
|
|
| |
The overridden one wasn't inserting a space,
so you would end up with .globalfoo
llvm-svn: 220329
|
|
|
|
| |
llvm-svn: 220304
|