[PATCH] D92911: [lld-macho] Support -mattr for LTO
Jez Ng via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Dec 8 22:28:16 PST 2020
int3 created this revision.
int3 added a reviewer: lld-macho.
Herald added subscribers: dang, pengfei, steven_wu, hiraditya, inglorion.
int3 requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
There doesn't seem to be an equivalent test for LLD-ELF, so
I've verified our behavior by cribbing a test from
CodeGen/X86/recip-fastmath.ll.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D92911
Files:
lld/MachO/Driver.cpp
lld/MachO/LTO.cpp
lld/MachO/Options.td
lld/test/MachO/mattrs.ll
Index: lld/test/MachO/mattrs.ll
===================================================================
--- /dev/null
+++ lld/test/MachO/mattrs.ll
@@ -0,0 +1,35 @@
+; REQUIRES: x86
+; RUN: llvm-as %s -o %t.o
+
+;; Verify that LTO behavior can be tweaked using -mattr.
+
+; RUN: %lld -mcpu haswell -mllvm -mattr=+fma %t.o -o %t.dylib -dylib
+; RUN: llvm-objdump -d --section="__text" --no-leading-addr --no-show-raw-insn %t.dylib | FileCheck %s --check-prefix=FMA
+
+; RUN: %lld -mcpu haswell -mllvm -mattr=-fma %t.o -o %t.dylib -dylib
+; RUN: llvm-objdump -d --section="__text" --no-leading-addr --no-show-raw-insn %t.dylib | FileCheck %s --check-prefix=NO-FMA
+
+; FMA: <_foo>:
+; FMA-NEXT: vrcpss %xmm0, %xmm0, %xmm1
+; FMA-NEXT: vfmsub213ss 7(%rip), %xmm1, %xmm0 # 2d4
+; FMA-NEXT: vfnmadd132ss %xmm1, %xmm1, %xmm0
+; FMA-NEXT: retq
+
+; NO-FMA: <_foo>:
+; NO-FMA-NEXT: vrcpss %xmm0, %xmm0, %xmm1
+; NO-FMA-NEXT: vmulss %xmm1, %xmm0, %xmm0
+; NO-FMA-NEXT: vmovss 16(%rip), %xmm2 # 2e0
+; NO-FMA-NEXT: vsubss %xmm0, %xmm2, %xmm0
+; NO-FMA-NEXT: vmulss %xmm0, %xmm1, %xmm0
+; NO-FMA-NEXT: vaddss %xmm0, %xmm1, %xmm0
+; NO-FMA-NEXT: retq
+
+target triple = "x86_64-apple-darwin"
+target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
+
+define float @foo(float %x) #0 {
+ %div = fdiv fast float 1.0, %x
+ ret float %div
+}
+
+attributes #0 = { "unsafe-fp-math"="true" "reciprocal-estimates"="divf,vec-divf" }
Index: lld/MachO/Options.td
===================================================================
--- lld/MachO/Options.td
+++ lld/MachO/Options.td
@@ -876,7 +876,6 @@
Group<grp_rare>;
def mllvm : Separate<["-"], "mllvm">,
HelpText<"Options to pass to LLVM">,
- Flags<[HelpHidden]>,
Group<grp_rare>;
def mcpu : Separate<["-"], "mcpu">,
HelpText<"Processor family target for LTO code generation">,
Index: lld/MachO/LTO.cpp
===================================================================
--- lld/MachO/LTO.cpp
+++ lld/MachO/LTO.cpp
@@ -28,6 +28,7 @@
lto::Config c;
c.Options = initTargetOptionsFromCodeGenFlags();
c.CPU = getCPUStr();
+ c.MAttrs = getMAttrs();
return c;
}
Index: lld/MachO/Driver.cpp
===================================================================
--- lld/MachO/Driver.cpp
+++ lld/MachO/Driver.cpp
@@ -804,6 +804,9 @@
parseClangOption(saver.save("-mcpu=" + StringRef(arg->getValue())),
arg->getSpelling());
+ for (auto *arg : args.filtered(OPT_mllvm))
+ parseClangOption(arg->getValue(), arg->getSpelling());
+
initLLVM();
compileBitcodeFiles();
replaceCommonSymbols();
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D92911.310419.patch
Type: text/x-patch
Size: 2637 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20201209/d331d8f0/attachment.bin>
More information about the llvm-commits
mailing list