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 [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
64cond.ll
64spill.ll
2006-01-22-BitConvertLegalize.ll
2007-05-09-JumpTables.ll
2007-07-05-LiveIntervalAssert.ll
2008-10-10-InlineAsmMemoryOperand.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
2008-10-10-InlineAsmRegOperand.ll [opaque pointer type] Add textual IR support for explicit type parameter to the call instruction 2015-04-16 23:24:18 +00:00
2009-08-28-PIC.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
2009-08-28-WeakLinkage.ll
2011-01-11-CC.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
2011-01-11-Call.ll [opaque pointer type] Add textual IR support for explicit type parameter to the call instruction 2015-04-16 23:24:18 +00:00
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 [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
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 Use the vanilla func_end symbol for .size. 2015-03-04 01:35:23 +00:00
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 [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
inlineasm.ll [Sparc] Implement i64 load/store support for 32-bit sparc. 2015-08-10 19:11:39 +00:00
leafproc.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
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 [opaque pointer type] Add textual IR support for explicit type parameter to gep operator 2015-03-13 18:20:45 +00:00
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 [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
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 [opaque pointer type] Add textual IR support for explicit type parameter to the call instruction 2015-04-16 23:24:18 +00:00
spill.ll [Sparc] Implement i64 load/store support for 32-bit sparc. 2015-08-10 19:11:39 +00:00
spillsize.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
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