From d967a878fab52807fe38d47bbe711ebf26d6f49f Mon Sep 17 00:00:00 2001 From: Sanjay Patel Date: Mon, 10 Aug 2015 23:07:26 +0000 Subject: [PATCH] fix minsize detection: minsize attribute implies optimizing for size llvm-svn: 244528 --- llvm/lib/CodeGen/BranchFolding.cpp | 4 +--- llvm/test/CodeGen/X86/tail-opts.ll | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/llvm/lib/CodeGen/BranchFolding.cpp b/llvm/lib/CodeGen/BranchFolding.cpp index f2d1bf0..260ab53 100644 --- a/llvm/lib/CodeGen/BranchFolding.cpp +++ b/llvm/lib/CodeGen/BranchFolding.cpp @@ -605,9 +605,7 @@ static bool ProfitableToMerge(MachineBasicBlock *MBB1, // branch instruction, which is likely to be smaller than the 2 // instructions that would be deleted in the merge. MachineFunction *MF = MBB1->getParent(); - if (EffectiveTailLen >= 2 && - // FIXME: Use Function::optForSize(). - MF->getFunction()->hasFnAttribute(Attribute::OptimizeForSize) && + if (EffectiveTailLen >= 2 && MF->getFunction()->optForSize() && (I1 == MBB1->begin() || I2 == MBB2->begin())) return true; diff --git a/llvm/test/CodeGen/X86/tail-opts.ll b/llvm/test/CodeGen/X86/tail-opts.ll index f590176..c522ba6 100644 --- a/llvm/test/CodeGen/X86/tail-opts.ll +++ b/llvm/test/CodeGen/X86/tail-opts.ll @@ -371,6 +371,44 @@ return: ret void } +; two_minsize - Same as two, but with minsize instead of optsize. + +; CHECK-LABEL: two_minsize: +; CHECK-NOT: XYZ +; CHECK: ret +; CHECK: movl $0, XYZ(%rip) +; CHECK: movl $1, XYZ(%rip) +; CHECK-NOT: XYZ + +define void @two_minsize() nounwind minsize { +entry: + %0 = icmp eq i32 undef, 0 + br i1 %0, label %bbx, label %bby + +bby: + switch i32 undef, label %bb7 [ + i32 16, label %return + ] + +bb7: + store volatile i32 0, i32* @XYZ + store volatile i32 1, i32* @XYZ + unreachable + +bbx: + switch i32 undef, label %bb12 [ + i32 128, label %return + ] + +bb12: + store volatile i32 0, i32* @XYZ + store volatile i32 1, i32* @XYZ + unreachable + +return: + ret void +} + ; two_nosize - Same as two, but without the optsize attribute. ; Now two instructions are enough to be tail-duplicated. -- 2.7.4