LLVM  6.0.0svn
Macros | Functions
AArch64CondBrTuning.cpp File Reference

This file contains a pass that transforms CBZ/CBNZ/TBZ/TBNZ instructions into a conditional branch (B.cond), when the NZCV flags can be set for "free". More...

#include "AArch64.h"
#include "AArch64Subtarget.h"
#include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineFunctionPass.h"
#include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
#include "llvm/CodeGen/MachineTraceMetrics.h"
#include "llvm/CodeGen/Passes.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Target/TargetInstrInfo.h"
#include "llvm/Target/TargetRegisterInfo.h"
#include "llvm/Target/TargetSubtargetInfo.h"
Include dependency graph for AArch64CondBrTuning.cpp:

Go to the source code of this file.

Macros

#define DEBUG_TYPE   "aarch64-cond-br-tuning"
 
#define AARCH64_CONDBR_TUNING_NAME   "AArch64 Conditional Branch Tuning"
 

Functions

 INITIALIZE_PASS (AArch64CondBrTuning, "aarch64-cond-br-tuning", AARCH64_CONDBR_TUNING_NAME, false, false) void AArch64CondBrTuning
 

Detailed Description

This file contains a pass that transforms CBZ/CBNZ/TBZ/TBNZ instructions into a conditional branch (B.cond), when the NZCV flags can be set for "free".

This is preferred on targets that have more flexibility when scheduling B.cond instructions as compared to CBZ/CBNZ/TBZ/TBNZ (assuming all other variables are equal). This can also reduce register pressure.

A few examples:

1) add w8, w0, w1 -> cmn w0, w1 ; CMN is an alias of ADDS. cbz w8, .LBB_2 -> b.eq .LBB0_2

2) add w8, w0, w1 -> adds w8, w0, w1 ; w8 has multiple uses. cbz w8, .LBB1_2 -> b.eq .LBB1_2

3) sub w8, w0, w1 -> subs w8, w0, w1 ; w8 has multiple uses. tbz w8, #31, .LBB6_2 -> b.pl .LBB6_2

Definition in file AArch64CondBrTuning.cpp.

Macro Definition Documentation

◆ AARCH64_CONDBR_TUNING_NAME

#define AARCH64_CONDBR_TUNING_NAME   "AArch64 Conditional Branch Tuning"

Definition at line 46 of file AArch64CondBrTuning.cpp.

◆ DEBUG_TYPE

#define DEBUG_TYPE   "aarch64-cond-br-tuning"

Definition at line 45 of file AArch64CondBrTuning.cpp.

Function Documentation

◆ INITIALIZE_PASS()

INITIALIZE_PASS ( AArch64CondBrTuning  ,
"aarch64-cond-br-tuning"  ,
AARCH64_CONDBR_TUNING_NAME  ,
false  ,
false   
)