mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
[Hexagon] Ignore DBG_VALUEs when counting instructions in hexagon-early-if
llvm-svn: 310524
This commit is contained in:
parent
b3db052a71
commit
0d7f0a7dfc
@ -155,9 +155,7 @@ namespace {
|
|||||||
public:
|
public:
|
||||||
static char ID;
|
static char ID;
|
||||||
|
|
||||||
HexagonEarlyIfConversion() : MachineFunctionPass(ID) {
|
HexagonEarlyIfConversion() : MachineFunctionPass(ID) {}
|
||||||
initializeHexagonEarlyIfConversionPass(*PassRegistry::getPassRegistry());
|
|
||||||
}
|
|
||||||
|
|
||||||
StringRef getPassName() const override {
|
StringRef getPassName() const override {
|
||||||
return "Hexagon early if conversion";
|
return "Hexagon early if conversion";
|
||||||
@ -227,7 +225,7 @@ namespace {
|
|||||||
|
|
||||||
char HexagonEarlyIfConversion::ID = 0;
|
char HexagonEarlyIfConversion::ID = 0;
|
||||||
|
|
||||||
INITIALIZE_PASS(HexagonEarlyIfConversion, "hexagon-eif",
|
INITIALIZE_PASS(HexagonEarlyIfConversion, "hexagon-early-if",
|
||||||
"Hexagon early if conversion", false, false)
|
"Hexagon early if conversion", false, false)
|
||||||
|
|
||||||
bool HexagonEarlyIfConversion::isPreheader(const MachineBasicBlock *B) const {
|
bool HexagonEarlyIfConversion::isPreheader(const MachineBasicBlock *B) const {
|
||||||
@ -539,7 +537,10 @@ bool HexagonEarlyIfConversion::isProfitable(const FlowPattern &FP) const {
|
|||||||
auto TotalCount = [] (const MachineBasicBlock *B, unsigned &Spare) {
|
auto TotalCount = [] (const MachineBasicBlock *B, unsigned &Spare) {
|
||||||
if (!B)
|
if (!B)
|
||||||
return 0u;
|
return 0u;
|
||||||
unsigned T = std::distance(B->begin(), B->getFirstTerminator());
|
unsigned T = std::count_if(B->begin(), B->getFirstTerminator(),
|
||||||
|
[](const MachineInstr &MI) {
|
||||||
|
return !MI.isDebugValue();
|
||||||
|
});
|
||||||
if (T < HEXAGON_PACKET_SIZE)
|
if (T < HEXAGON_PACKET_SIZE)
|
||||||
Spare += HEXAGON_PACKET_SIZE-T;
|
Spare += HEXAGON_PACKET_SIZE-T;
|
||||||
return T;
|
return T;
|
||||||
|
@ -109,6 +109,7 @@ SchedCustomRegistry("hexagon", "Run Hexagon's custom scheduler",
|
|||||||
|
|
||||||
namespace llvm {
|
namespace llvm {
|
||||||
extern char &HexagonExpandCondsetsID;
|
extern char &HexagonExpandCondsetsID;
|
||||||
|
void initializeHexagonEarlyIfConversionPass(PassRegistry&);
|
||||||
void initializeHexagonExpandCondsetsPass(PassRegistry&);
|
void initializeHexagonExpandCondsetsPass(PassRegistry&);
|
||||||
void initializeHexagonGenMuxPass(PassRegistry&);
|
void initializeHexagonGenMuxPass(PassRegistry&);
|
||||||
void initializeHexagonLoopIdiomRecognizePass(PassRegistry&);
|
void initializeHexagonLoopIdiomRecognizePass(PassRegistry&);
|
||||||
@ -163,6 +164,7 @@ extern "C" void LLVMInitializeHexagonTarget() {
|
|||||||
RegisterTargetMachine<HexagonTargetMachine> X(getTheHexagonTarget());
|
RegisterTargetMachine<HexagonTargetMachine> X(getTheHexagonTarget());
|
||||||
|
|
||||||
PassRegistry &PR = *PassRegistry::getPassRegistry();
|
PassRegistry &PR = *PassRegistry::getPassRegistry();
|
||||||
|
initializeHexagonEarlyIfConversionPass(PR);
|
||||||
initializeHexagonGenMuxPass(PR);
|
initializeHexagonGenMuxPass(PR);
|
||||||
initializeHexagonLoopIdiomRecognizePass(PR);
|
initializeHexagonLoopIdiomRecognizePass(PR);
|
||||||
initializeHexagonNewValueJumpPass(PR);
|
initializeHexagonNewValueJumpPass(PR);
|
||||||
|
53
test/CodeGen/Hexagon/early-if-debug.mir
Normal file
53
test/CodeGen/Hexagon/early-if-debug.mir
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
# RUN: llc -march=hexagon -eif-limit=4 -run-pass hexagon-early-if -o - %s | FileCheck %s
|
||||||
|
# Check that even with the limit of 4 instructions, the block bb.1 is
|
||||||
|
# if-converted.
|
||||||
|
|
||||||
|
# CHECK-LABEL: bb.0:
|
||||||
|
# CHECK: %0 = COPY %r0
|
||||||
|
# CHECK: %1 = C2_cmpeqi %0, 0
|
||||||
|
# CHECK: %2 = A2_tfrsi 123
|
||||||
|
# CHECK: DBG_VALUE debug-use %0, debug-use _
|
||||||
|
# CHECK: DBG_VALUE debug-use %0, debug-use _
|
||||||
|
# CHECK: DBG_VALUE debug-use %0, debug-use _
|
||||||
|
# CHECK: DBG_VALUE debug-use %0, debug-use _
|
||||||
|
# CHECK: DBG_VALUE debug-use %0, debug-use _
|
||||||
|
# CHECK: %3 = A2_tfrsi 321
|
||||||
|
# CHECK: %5 = C2_mux %1, %2, %3
|
||||||
|
|
||||||
|
--- |
|
||||||
|
define void @foo() {
|
||||||
|
ret void
|
||||||
|
}
|
||||||
|
!1 = !DIExpression()
|
||||||
|
...
|
||||||
|
---
|
||||||
|
name: foo
|
||||||
|
tracksRegLiveness: true
|
||||||
|
registers:
|
||||||
|
- { id: 0, class: intregs }
|
||||||
|
- { id: 1, class: predregs }
|
||||||
|
- { id: 2, class: intregs }
|
||||||
|
- { id: 3, class: intregs }
|
||||||
|
- { id: 4, class: intregs }
|
||||||
|
body: |
|
||||||
|
bb.0:
|
||||||
|
liveins: %r0
|
||||||
|
|
||||||
|
%0 = COPY %r0
|
||||||
|
%1 = C2_cmpeqi %0, 0
|
||||||
|
%2 = A2_tfrsi 123
|
||||||
|
J2_jumpt %1, %bb.2, implicit-def dead %pc
|
||||||
|
J2_jump %bb.1, implicit-def dead %pc
|
||||||
|
|
||||||
|
bb.1:
|
||||||
|
DBG_VALUE debug-use %0, debug-use _, !1, !1
|
||||||
|
DBG_VALUE debug-use %0, debug-use _, !1, !1
|
||||||
|
DBG_VALUE debug-use %0, debug-use _, !1, !1
|
||||||
|
DBG_VALUE debug-use %0, debug-use _, !1, !1
|
||||||
|
DBG_VALUE debug-use %0, debug-use _, !1, !1
|
||||||
|
%3 = A2_tfrsi 321
|
||||||
|
|
||||||
|
bb.2:
|
||||||
|
%4 = PHI %2, %bb.0, %3, %bb.1
|
||||||
|
|
||||||
|
...
|
Loading…
Reference in New Issue
Block a user