From cc5bd4a56140f8c7381afa686f28b361fd540436 Mon Sep 17 00:00:00 2001 From: Venkatraman Govindaraju Date: Sat, 12 Feb 2011 19:02:33 +0000 Subject: [PATCH] Prevent IMPLICIT_DEF/KILL to become a delay filler instruction in SPARC backend. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@125444 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/Sparc/DelaySlotFiller.cpp | 3 +++ test/CodeGen/SPARC/2011-01-19-DelaySlot.ll | 13 +++++++++++++ 2 files changed, 16 insertions(+) diff --git a/lib/Target/Sparc/DelaySlotFiller.cpp b/lib/Target/Sparc/DelaySlotFiller.cpp index b0d669b860f..ee292758d18 100644 --- a/lib/Target/Sparc/DelaySlotFiller.cpp +++ b/lib/Target/Sparc/DelaySlotFiller.cpp @@ -182,6 +182,9 @@ bool Filler::delayHasHazard(MachineBasicBlock::iterator candidate, SmallSet &RegUses) { + if (candidate->isImplicitDef() || candidate->isKill()) + return true; + if (candidate->getDesc().mayLoad()) { sawLoad = true; if (sawStore) diff --git a/test/CodeGen/SPARC/2011-01-19-DelaySlot.ll b/test/CodeGen/SPARC/2011-01-19-DelaySlot.ll index d9fc8ea3aa8..bc27e987a17 100644 --- a/test/CodeGen/SPARC/2011-01-19-DelaySlot.ll +++ b/test/CodeGen/SPARC/2011-01-19-DelaySlot.ll @@ -1,4 +1,5 @@ ;RUN: llc -march=sparc < %s | FileCheck %s +;RUN: llc -march=sparc -O0 < %s | FileCheck %s -check-prefix=UNOPT define i32 @test(i32 %a) nounwind { @@ -75,3 +76,15 @@ bb1: ; preds = %entry declare i32 @foo(...) declare i32 @bar(i32) + + +define i32 @test_implicit_def() nounwind { +entry: +;UNOPT: test_implicit_def +;UNOPT: call func +;UNOPT-NEXT: nop + %0 = tail call i32 @func(i32* undef) nounwind + ret i32 0 +} + +declare i32 @func(i32*) -- 2.34.1