llvm-project/llvm/test/CodeGen/SPARC
James Y Knight 7699494f08 [SPARC] Revamp AnalyzeBranch and add ReverseBranchCondition.
AnalyzeBranch on X86 (and, previously, SPARC, which implementation was
copied from X86) tries to modify the branches based on block
layout (e.g. checking isLayoutSuccessor), when AllowModify is true.

The rest of the architectures leave that up to the caller, which can
call InsertBranch, RemoveBranch, and ReverseBranchCondition as
appropriate. That appears to be the preferred way to do it nowadays.

This commit makes SPARC like the rest: replaces AnalyzeBranch with an
implementation cribbed from AArch64, and adds a ReverseBranchCondition
implementation.

Additionally, a test-case has been added (also cribbed from AArch64)
demonstrating that redundant branch sequences no longer get emitted.

E.g., it used to emit code like this:
         bne .LBB1_2
         nop
         ba .LBB1_1
         nop
 .LBB1_2:

And now emits:
        cmp %i0, 42
        be .LBB1_1
        nop

llvm-svn: 257572
2016-01-13 04:44:14 +00:00
..
32abi.ll [Sparc] Fix handling of double incoming arguments on sparc little-endian. 2015-12-15 19:23:12 +00:00
64abi.ll [SPARC] Switch to the Machine Scheduler. 2015-09-10 21:49:06 +00:00
64bit.ll
64cond.ll
64spill.ll
2006-01-22-BitConvertLegalize.ll
2007-05-09-JumpTables.ll
2007-07-05-LiveIntervalAssert.ll
2008-10-10-InlineAsmMemoryOperand.ll
2008-10-10-InlineAsmRegOperand.ll
2009-08-28-PIC.ll
2009-08-28-WeakLinkage.ll
2011-01-11-CC.ll
2011-01-11-Call.ll
2011-01-11-FrameAddr.ll
2011-01-19-DelaySlot.ll [SPARC] Revamp AnalyzeBranch and add ReverseBranchCondition. 2016-01-13 04:44:14 +00:00
2011-01-21-ByValArgs.ll
2011-01-22-SRet.ll [SPARC] Switch to the Machine Scheduler. 2015-09-10 21:49:06 +00:00
2011-12-03-TailDuplication.ll
2012-05-01-LowerArguments.ll
2013-05-17-CallFrame.ll
DbgValueOtherTargets.test
analyze-branch.ll [SPARC] Revamp AnalyzeBranch and add ReverseBranchCondition. 2016-01-13 04:44:14 +00:00
atomics.ll
basictest.ll [SPARC] Switch to the Machine Scheduler. 2015-09-10 21:49:06 +00:00
blockaddr.ll
constpool.ll
ctpop.ll
empty-functions.ll
exception.ll Move the personality function from LandingPadInst to Function 2015-06-17 20:52:32 +00:00
float-constants.ll Fix assert when emitting llvm.pow.f86. 2015-10-09 21:36:19 +00:00
float.ll [SPARC] Switch to the Machine Scheduler. 2015-09-10 21:49:06 +00:00
fp128.ll [Sparc] Support user-specified stack object overalignment. 2015-08-21 04:17:56 +00:00
globals.ll
inlineasm.ll [Sparc] Implement i64 load/store support for 32-bit sparc. 2015-08-10 19:11:39 +00:00
leafproc.ll
lit.local.cfg
mature-mc-support.ll
missing-sret.ll Drop assert that a call with struct return goes to a function with sret 2015-10-21 20:05:01 +00:00
missinglabel.ll
mult-alt-generic-sparc.ll
multiple-div.ll [SPARC] Cleanup handling of the Y/ASR registers. 2015-07-08 16:25:12 +00:00
obj-relocs.ll Revert r240302 ("Bring r240130 back."). 2015-06-23 11:31:32 +00:00
parts.ll
private.ll
rem.ll
reserved-regs.ll [Sparc] Implement i64 load/store support for 32-bit sparc. 2015-08-10 19:11:39 +00:00
select-mask.ll Fix CHECK directives that weren't checking. 2015-08-31 21:10:35 +00:00
setjmp.ll
spill.ll [Sparc] Implement i64 load/store support for 32-bit sparc. 2015-08-10 19:11:39 +00:00
spillsize.ll
sret-secondary.ll
stack-align.ll [SPARC] Fix stupid oversight in stack realignment support. 2015-08-26 17:57:51 +00:00
tls.ll [SPARC] Switch to the Machine Scheduler. 2015-09-10 21:49:06 +00:00
trap.ll
varargs.ll [SPARC] Switch to the Machine Scheduler. 2015-09-10 21:49:06 +00:00