This patch adds the commandline option -mips-compact-branches={never,optimal,always),
which controls how LLVM generates compact branches for MIPS targets. By
default, the compact branch policy is 'optimal' where LLVM will (hopefully)
pick the optimal branch for any situation. The 'never' policy will disable
the generation of compact branches and 'always' will generate compact branches
wherever possible.
Reviewers: dsanders
Differential Review: http://reviews.llvm.org/D20167
llvm-svn: 269753
29 lines
1.1 KiB
LLVM
29 lines
1.1 KiB
LLVM
; Check that -mips-compact-branches={never,optimal,always} is accepted and honoured.
|
|
; RUN: llc -march=mips -mcpu=mips32r6 -mips-compact-branches=never < %s | FileCheck %s -check-prefix=NEVER
|
|
; RUN: llc -march=mips -mcpu=mips32r6 -mips-compact-branches=optimal < %s | FileCheck %s -check-prefix=OPTIMAL
|
|
; RUN: llc -march=mips -mcpu=mips32r6 -mips-compact-branches=always < %s | FileCheck %s -check-prefix=ALWAYS
|
|
|
|
define i32 @l(i32 signext %a, i32 signext %b) {
|
|
entry:
|
|
%add = add nsw i32 %b, %a
|
|
%cmp = icmp slt i32 %add, 100
|
|
; NEVER: beq
|
|
; OPTIMAL: beq
|
|
; ALWAYS: beqzc
|
|
; This nop is required for correct as having (j|b)al as the instruction
|
|
; immediately following beqzc would cause a forbidden slot hazard.
|
|
; ALWAYS: nop
|
|
br i1 %cmp, label %if.then, label %if.end
|
|
|
|
if.then: ; preds = %entry
|
|
%call = tail call i32 @k()
|
|
br label %if.end
|
|
|
|
if.end: ; preds = %entry, %if.then
|
|
%call.pn = phi i32 [ %call, %if.then ], [ -1, %entry ]
|
|
%c.0 = add nsw i32 %call.pn, %add
|
|
ret i32 %c.0
|
|
}
|
|
|
|
declare i32 @k() #1
|