[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