1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-24 05:23:45 +02:00
llvm-mirror/test/CodeGen/Mips/compactbranches/compact-branch-policy.ll
Simon Dardis a99b8023bb [mips] Compact branch policy control for MIPSR6
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
2016-05-17 10:21:43 +00:00

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