<div dir="ltr">Hi Evandro,<div><br></div><div>I'm going to ask you to revert this patch please. There are a few reasons:</div><div><br></div><div>a) I don't see a review thread here? This changes the port quite a bit.</div><div><br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br class="gmail_msg">
 ///<br class="gmail_msg">
 AArch64TargetMachine::AArch64TargetMachine(const Target &T, const Triple &TT,<br class="gmail_msg">
@@ -149,7 +173,8 @@ AArch64TargetMachine::AArch64TargetMachi<br class="gmail_msg">
     : LLVMTargetMachine(T, computeDataLayout(TT, LittleEndian), TT, CPU, FS,<br class="gmail_msg">
                         Options, RM, CM, OL),<br class="gmail_msg">
       TLOF(createTLOF(getTargetTriple())),<br class="gmail_msg">
-      isLittle(LittleEndian) {<br class="gmail_msg">
+      Subtarget(TT, CPU, FS, *this, LittleEndian) {<br class="gmail_msg">
+  initReciprocals(*this, Subtarget);<br class="gmail_msg">
   initAsmInfo();<br class="gmail_msg">
 }<br class="gmail_msg">
<br class="gmail_msg">
@@ -189,7 +214,7 @@ AArch64TargetMachine::getSubtargetImpl(c<br class="gmail_msg">
     // function that reside in TargetOptions.<br class="gmail_msg">
     resetTargetOptions(F);<br class="gmail_msg">
     I = llvm::make_unique<AArch64Subtarget>(TargetTriple, CPU, FS, *this,<br class="gmail_msg">
-                                            isLittle);<br class="gmail_msg">
+                                            Subtarget.isLittleEndian());<br class="gmail_msg">
 #ifndef LLVM_BUILD_GLOBAL_ISEL<br class="gmail_msg">
    GISelAccessor *GISel = new GISelAccessor();<br class="gmail_msg">
 #else<br class="gmail_msg">
<br class="gmail_msg">
Modified: llvm/trunk/lib/Target/AArch64/AArch64TargetMachine.h<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64TargetMachine.h?rev=268539&r1=268538&r2=268539&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64TargetMachine.h?rev=268539&r1=268538&r2=268539&view=diff</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- llvm/trunk/lib/Target/AArch64/AArch64TargetMachine.h (original)<br class="gmail_msg">
+++ llvm/trunk/lib/Target/AArch64/AArch64TargetMachine.h Wed May  4 15:18:27 2016<br class="gmail_msg">
@@ -46,7 +46,7 @@ public:<br class="gmail_msg">
   }<br class="gmail_msg">
<br class="gmail_msg">
 private:<br class="gmail_msg">
-  bool isLittle;<br class="gmail_msg">
+  AArch64Subtarget Subtarget;<br class="gmail_msg">
 };<br class="gmail_msg">
<br class="gmail_msg"></blockquote><div><br></div><div>These changes aren't correct. There is no need and it's currently invalid for the AArch64 port to depend on a single global subtarget for all configuration. This is going to break anything that depends on changing subtargets on a function by function basis (including different -mcpu flags in different translation units or different options).</div><div><br></div><div>You're going to need to do all of these changes in a different way and I haven't had time to look to see what's going on.</div><div><br></div><div>Thanks!</div><div><br></div><div>-eric</div><div><br></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
 // AArch64leTargetMachine - AArch64 little endian target machine.<br class="gmail_msg">
<br class="gmail_msg">
Added: llvm/trunk/test/CodeGen/AArch64/recp-fastmath.ll<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/recp-fastmath.ll?rev=268539&view=auto" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/recp-fastmath.ll?rev=268539&view=auto</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- llvm/trunk/test/CodeGen/AArch64/recp-fastmath.ll (added)<br class="gmail_msg">
+++ llvm/trunk/test/CodeGen/AArch64/recp-fastmath.ll Wed May  4 15:18:27 2016<br class="gmail_msg">
@@ -0,0 +1,79 @@<br class="gmail_msg">
+; RUN: llc < %s -mtriple=aarch64 -mattr=neon -recip=!div,!vec-div | FileCheck %s --check-prefix=FAULT<br class="gmail_msg">
+; RUN: llc < %s -mtriple=aarch64 -mattr=neon -recip=div,vec-div   | FileCheck %s<br class="gmail_msg">
+<br class="gmail_msg">
+define float @frecp(float %x) #0 {<br class="gmail_msg">
+  %div = fdiv fast float 1.0, %x<br class="gmail_msg">
+  ret float %div<br class="gmail_msg">
+<br class="gmail_msg">
+; FAULT-LABEL: frecp:<br class="gmail_msg">
+; FAULT-NEXT: BB#0<br class="gmail_msg">
+; FAULT-NEXT: fmov<br class="gmail_msg">
+; FAULT-NEXT: fdiv<br class="gmail_msg">
+<br class="gmail_msg">
+; CHECK-LABEL: frecp:<br class="gmail_msg">
+; CHECK-NEXT: BB#0<br class="gmail_msg">
+; CHECK-NEXT: frecpe<br class="gmail_msg">
+; CHECK-NEXT: fmov<br class="gmail_msg">
+}<br class="gmail_msg">
+<br class="gmail_msg">
+define <2 x float> @f2recp(<2 x float> %x) #0 {<br class="gmail_msg">
+  %div = fdiv fast <2 x float> <float 1.0, float 1.0>, %x<br class="gmail_msg">
+  ret <2 x float> %div<br class="gmail_msg">
+<br class="gmail_msg">
+; FAULT-LABEL: f2recp:<br class="gmail_msg">
+; FAULT-NEXT: BB#0<br class="gmail_msg">
+; FAULT-NEXT: fmov<br class="gmail_msg">
+; FAULT-NEXT: fdiv<br class="gmail_msg">
+<br class="gmail_msg">
+; CHECK-LABEL: f2recp:<br class="gmail_msg">
+; CHECK-NEXT: BB#0<br class="gmail_msg">
+; CHECK-NEXT: fmov<br class="gmail_msg">
+; CHECK-NEXT: frecpe<br class="gmail_msg">
+}<br class="gmail_msg">
+<br class="gmail_msg">
+define <4 x float> @f4recp(<4 x float> %x) #0 {<br class="gmail_msg">
+  %div = fdiv fast <4 x float> <float 1.0, float 1.0, float 1.0, float 1.0>, %x<br class="gmail_msg">
+  ret <4 x float> %div<br class="gmail_msg">
+<br class="gmail_msg">
+; FAULT-LABEL: f4recp:<br class="gmail_msg">
+; FAULT-NEXT: BB#0<br class="gmail_msg">
+; FAULT-NEXT: fmov<br class="gmail_msg">
+; FAULT-NEXT: fdiv<br class="gmail_msg">
+<br class="gmail_msg">
+; CHECK-LABEL: f4recp:<br class="gmail_msg">
+; CHECK-NEXT: BB#0<br class="gmail_msg">
+; CHECK-NEXT: fmov<br class="gmail_msg">
+; CHECK-NEXT: frecpe<br class="gmail_msg">
+}<br class="gmail_msg">
+<br class="gmail_msg">
+define double @drecp(double %x) #0 {<br class="gmail_msg">
+  %div = fdiv fast double 1.0, %x<br class="gmail_msg">
+  ret double %div<br class="gmail_msg">
+<br class="gmail_msg">
+; FAULT-LABEL: drecp:<br class="gmail_msg">
+; FAULT-NEXT: BB#0<br class="gmail_msg">
+; FAULT-NEXT: fmov<br class="gmail_msg">
+; FAULT-NEXT: fdiv<br class="gmail_msg">
+<br class="gmail_msg">
+; CHECK-LABEL: drecp:<br class="gmail_msg">
+; CHECK-NEXT: BB#0<br class="gmail_msg">
+; CHECK-NEXT: frecpe<br class="gmail_msg">
+; CHECK-NEXT: fmov<br class="gmail_msg">
+}<br class="gmail_msg">
+<br class="gmail_msg">
+define <2 x double> @d2recp(<2 x double> %x) #0 {<br class="gmail_msg">
+  %div = fdiv fast <2 x double> <double 1.0, double 1.0>, %x<br class="gmail_msg">
+  ret <2 x double> %div<br class="gmail_msg">
+<br class="gmail_msg">
+; FAULT-LABEL: d2recp:<br class="gmail_msg">
+; FAULT-NEXT: BB#0<br class="gmail_msg">
+; FAULT-NEXT: fmov<br class="gmail_msg">
+; FAULT-NEXT: fdiv<br class="gmail_msg">
+<br class="gmail_msg">
+; CHECK-LABEL: d2recp:<br class="gmail_msg">
+; CHECK-NEXT: BB#0<br class="gmail_msg">
+; CHECK-NEXT: fmov<br class="gmail_msg">
+; CHECK-NEXT: frecpe<br class="gmail_msg">
+}<br class="gmail_msg">
+<br class="gmail_msg">
+attributes #0 = { nounwind "unsafe-fp-math"="true" }<br class="gmail_msg">
<br class="gmail_msg">
Added: llvm/trunk/test/CodeGen/AArch64/sqrt-fastmath.ll<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/sqrt-fastmath.ll?rev=268539&view=auto" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/sqrt-fastmath.ll?rev=268539&view=auto</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- llvm/trunk/test/CodeGen/AArch64/sqrt-fastmath.ll (added)<br class="gmail_msg">
+++ llvm/trunk/test/CodeGen/AArch64/sqrt-fastmath.ll Wed May  4 15:18:27 2016<br class="gmail_msg">
@@ -0,0 +1,158 @@<br class="gmail_msg">
+; RUN: llc < %s -mtriple=aarch64 -mattr=neon -recip=!sqrt,!vec-sqrt | FileCheck %s --check-prefix=FAULT<br class="gmail_msg">
+; RUN: llc < %s -mtriple=aarch64 -mattr=neon -recip=sqrt,vec-sqrt   | FileCheck %s<br class="gmail_msg">
+<br class="gmail_msg">
+declare float @llvm.sqrt.f32(float) #1<br class="gmail_msg">
+declare double @llvm.sqrt.f64(double) #1<br class="gmail_msg">
+declare <2 x float> @llvm.sqrt.v2f32(<2 x float>) #1<br class="gmail_msg">
+declare <4 x float> @llvm.sqrt.v4f32(<4 x float>) #1<br class="gmail_msg">
+declare <2 x double> @llvm.sqrt.v2f64(<2 x double>) #1<br class="gmail_msg">
+<br class="gmail_msg">
+define float @fsqrt(float %a) #0 {<br class="gmail_msg">
+  %1 = tail call fast float @llvm.sqrt.f32(float %a)<br class="gmail_msg">
+  ret float %1<br class="gmail_msg">
+<br class="gmail_msg">
+; FAULT-LABEL: fsqrt:<br class="gmail_msg">
+; FAULT-NEXT: BB#0<br class="gmail_msg">
+; FAULT-NEXT: fsqrt<br class="gmail_msg">
+<br class="gmail_msg">
+; CHECK-LABEL: fsqrt:<br class="gmail_msg">
+; CHECK-NEXT: BB#0<br class="gmail_msg">
+; CHECK-NEXT: fmov<br class="gmail_msg">
+; CHECK-NEXT: frsqrte<br class="gmail_msg">
+}<br class="gmail_msg">
+<br class="gmail_msg">
+define <2 x float> @f2sqrt(<2 x float> %a) #0 {<br class="gmail_msg">
+  %1 = tail call fast <2 x float> @llvm.sqrt.v2f32(<2 x float> %a) #2<br class="gmail_msg">
+  ret <2 x float> %1<br class="gmail_msg">
+<br class="gmail_msg">
+; FAULT-LABEL: f2sqrt:<br class="gmail_msg">
+; FAULT-NEXT: BB#0<br class="gmail_msg">
+; FAULT-NEXT: fsqrt<br class="gmail_msg">
+<br class="gmail_msg">
+; CHECK-LABEL: f2sqrt:<br class="gmail_msg">
+; CHECK-NEXT: BB#0<br class="gmail_msg">
+; CHECK-NEXT: fmov<br class="gmail_msg">
+; CHECK-NEXT: mov<br class="gmail_msg">
+; CHECK-NEXT: frsqrte<br class="gmail_msg">
+}<br class="gmail_msg">
+<br class="gmail_msg">
+define <4 x float> @f4sqrt(<4 x float> %a) #0 {<br class="gmail_msg">
+  %1 = tail call fast <4 x float> @llvm.sqrt.v4f32(<4 x float> %a) #2<br class="gmail_msg">
+  ret <4 x float> %1<br class="gmail_msg">
+<br class="gmail_msg">
+; FAULT-LABEL: f4sqrt:<br class="gmail_msg">
+; FAULT-NEXT: BB#0<br class="gmail_msg">
+; FAULT-NEXT: fsqrt<br class="gmail_msg">
+<br class="gmail_msg">
+; CHECK-LABEL: f4sqrt:<br class="gmail_msg">
+; CHECK-NEXT: BB#0<br class="gmail_msg">
+; CHECK-NEXT: fmov<br class="gmail_msg">
+; CHECK-NEXT: mov<br class="gmail_msg">
+; CHECK-NEXT: frsqrte<br class="gmail_msg">
+}<br class="gmail_msg">
+<br class="gmail_msg">
+define double @dsqrt(double %a) #0 {<br class="gmail_msg">
+  %1 = tail call fast double @llvm.sqrt.f64(double %a)<br class="gmail_msg">
+  ret double %1<br class="gmail_msg">
+<br class="gmail_msg">
+; FAULT-LABEL: dsqrt:<br class="gmail_msg">
+; FAULT-NEXT: BB#0<br class="gmail_msg">
+; FAULT-NEXT: fsqrt<br class="gmail_msg">
+<br class="gmail_msg">
+; CHECK-LABEL: dsqrt:<br class="gmail_msg">
+; CHECK-NEXT: BB#0<br class="gmail_msg">
+; CHECK-NEXT: fmov<br class="gmail_msg">
+; CHECK-NEXT: frsqrte<br class="gmail_msg">
+}<br class="gmail_msg">
+<br class="gmail_msg">
+define <2 x double> @d2sqrt(<2 x double> %a) #0 {<br class="gmail_msg">
+  %1 = tail call fast <2 x double> @llvm.sqrt.v2f64(<2 x double> %a) #2<br class="gmail_msg">
+  ret <2 x double> %1<br class="gmail_msg">
+<br class="gmail_msg">
+; FAULT-LABEL: d2sqrt:<br class="gmail_msg">
+; FAULT-NEXT: BB#0<br class="gmail_msg">
+; FAULT-NEXT: fsqrt<br class="gmail_msg">
+<br class="gmail_msg">
+; CHECK-LABEL: d2sqrt:<br class="gmail_msg">
+; CHECK-NEXT: BB#0<br class="gmail_msg">
+; CHECK-NEXT: fmov<br class="gmail_msg">
+; CHECK-NEXT: mov<br class="gmail_msg">
+; CHECK-NEXT: frsqrte<br class="gmail_msg">
+}<br class="gmail_msg">
+<br class="gmail_msg">
+define float @frsqrt(float %a) #0 {<br class="gmail_msg">
+  %1 = tail call fast float @llvm.sqrt.f32(float %a)<br class="gmail_msg">
+  %2 = fdiv fast float 1.000000e+00, %1<br class="gmail_msg">
+  ret float %2<br class="gmail_msg">
+<br class="gmail_msg">
+; FAULT-LABEL: frsqrt:<br class="gmail_msg">
+; FAULT-NEXT: BB#0<br class="gmail_msg">
+; FAULT-NEXT: fsqrt<br class="gmail_msg">
+<br class="gmail_msg">
+; CHECK-LABEL: frsqrt:<br class="gmail_msg">
+; CHECK-NEXT: BB#0<br class="gmail_msg">
+; CHECK-NEXT: fmov<br class="gmail_msg">
+; CHECK-NEXT: frsqrte<br class="gmail_msg">
+}<br class="gmail_msg">
+<br class="gmail_msg">
+define <2 x float> @f2rsqrt(<2 x float> %a) #0 {<br class="gmail_msg">
+  %1 = tail call fast <2 x float> @llvm.sqrt.v2f32(<2 x float> %a) #2<br class="gmail_msg">
+  %2 = fdiv fast <2 x float> <float 1.000000e+00, float 1.000000e+00>, %1<br class="gmail_msg">
+  ret <2 x float> %2<br class="gmail_msg">
+<br class="gmail_msg">
+; FAULT-LABEL: f2rsqrt:<br class="gmail_msg">
+; FAULT-NEXT: BB#0<br class="gmail_msg">
+; FAULT-NEXT: fsqrt<br class="gmail_msg">
+<br class="gmail_msg">
+; CHECK-LABEL: f2rsqrt:<br class="gmail_msg">
+; CHECK-NEXT: BB#0<br class="gmail_msg">
+; CHECK-NEXT: fmov<br class="gmail_msg">
+; CHECK-NEXT: frsqrte<br class="gmail_msg">
+}<br class="gmail_msg">
+<br class="gmail_msg">
+define <4 x float> @f4rsqrt(<4 x float> %a) #0 {<br class="gmail_msg">
+  %1 = tail call fast <4 x float> @llvm.sqrt.v4f32(<4 x float> %a) #2<br class="gmail_msg">
+  %2 = fdiv fast <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, %1<br class="gmail_msg">
+  ret <4 x float> %2<br class="gmail_msg">
+<br class="gmail_msg">
+; FAULT-LABEL: f4rsqrt:<br class="gmail_msg">
+; FAULT-NEXT: BB#0<br class="gmail_msg">
+; FAULT-NEXT: fsqrt<br class="gmail_msg">
+<br class="gmail_msg">
+; CHECK-LABEL: f4rsqrt:<br class="gmail_msg">
+; CHECK-NEXT: BB#0<br class="gmail_msg">
+; CHECK-NEXT: fmov<br class="gmail_msg">
+; CHECK-NEXT: frsqrte<br class="gmail_msg">
+}<br class="gmail_msg">
+<br class="gmail_msg">
+define double @drsqrt(double %a) #0 {<br class="gmail_msg">
+  %1 = tail call fast double @llvm.sqrt.f64(double %a)<br class="gmail_msg">
+  %2 = fdiv fast double 1.000000e+00, %1<br class="gmail_msg">
+  ret double %2<br class="gmail_msg">
+<br class="gmail_msg">
+; FAULT-LABEL: drsqrt:<br class="gmail_msg">
+; FAULT-NEXT: BB#0<br class="gmail_msg">
+; FAULT-NEXT: fsqrt<br class="gmail_msg">
+<br class="gmail_msg">
+; CHECK-LABEL: drsqrt:<br class="gmail_msg">
+; CHECK-NEXT: BB#0<br class="gmail_msg">
+; CHECK-NEXT: fmov<br class="gmail_msg">
+; CHECK-NEXT: frsqrte<br class="gmail_msg">
+}<br class="gmail_msg">
+<br class="gmail_msg">
+define <2 x double> @d2rsqrt(<2 x double> %a) #0 {<br class="gmail_msg">
+  %1 = tail call fast <2 x double> @llvm.sqrt.v2f64(<2 x double> %a) #2<br class="gmail_msg">
+  %2 = fdiv fast <2 x double> <double 1.000000e+00, double 1.000000e+00>, %1<br class="gmail_msg">
+  ret <2 x double> %2<br class="gmail_msg">
+<br class="gmail_msg">
+; FAULT-LABEL: d2rsqrt:<br class="gmail_msg">
+; FAULT-NEXT: BB#0<br class="gmail_msg">
+; FAULT-NEXT: fsqrt<br class="gmail_msg">
+<br class="gmail_msg">
+; CHECK-LABEL: d2rsqrt:<br class="gmail_msg">
+; CHECK-NEXT: BB#0<br class="gmail_msg">
+; CHECK-NEXT: fmov<br class="gmail_msg">
+; CHECK-NEXT: frsqrte<br class="gmail_msg">
+}<br class="gmail_msg">
+<br class="gmail_msg">
+attributes #0 = { nounwind "unsafe-fp-math"="true" }<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
_______________________________________________<br class="gmail_msg">
llvm-commits mailing list<br class="gmail_msg">
<a href="mailto:llvm-commits@lists.llvm.org" class="gmail_msg" target="_blank">llvm-commits@lists.llvm.org</a><br class="gmail_msg">
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" class="gmail_msg" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br class="gmail_msg">
</blockquote></div></div></div>