<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Tue, Sep 20, 2016 at 8:48 AM Evandro Menezes <<a href="mailto:e.menezes@samsung.com">e.menezes@samsung.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Eric,<br class="gmail_msg">
<br class="gmail_msg">
Will do.  Since it's a few months old, it'll take me a couple of hours<br class="gmail_msg">
or so to revert it.<br class="gmail_msg">
<br class="gmail_msg"></blockquote><div><br></div><div>No worries at all. I hear rumor that Hal is on vacation so maybe we can come up with a solution by the time he can come back and deal with the power version :)</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I'd appreciate any further information to point me in the right direction.<br class="gmail_msg">
<br class="gmail_msg"></blockquote><div><br></div><div>Of course. The rough idea is that the TargetMachine holds things that only cover tuning/code generation for an entire module - since in a merged module you've got functions coming in with possibly different options then you need to come up with a function based way to do the tuning.</div><div><br></div><div>One thought is using TT, we'll probably want to pull the reciprocal implementation off of TargetOptions since it can vary per subtarget and instead call through TTI during optimization to figure out what we can do and TTI is subtarget dependent.</div><div><br></div><div>Thoughts? Sanjay?</div><div><br></div><div>-eric</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Thank you,<br class="gmail_msg">
<br class="gmail_msg">
--<br class="gmail_msg">
Evandro Menezes<br class="gmail_msg">
<br class="gmail_msg">
On 09/20/16 10:32, Eric Christopher wrote:<br class="gmail_msg">
><br class="gmail_msg">
><br class="gmail_msg">
> On Tue, Sep 20, 2016 at 5:15 AM Evandro Menezes <<a href="mailto:e.menezes@samsung.com" class="gmail_msg" target="_blank">e.menezes@samsung.com</a><br class="gmail_msg">
> <mailto:<a href="mailto:e.menezes@samsung.com" class="gmail_msg" target="_blank">e.menezes@samsung.com</a>>> wrote:<br class="gmail_msg">
><br class="gmail_msg">
>     Hi, Eric.<br class="gmail_msg">
><br class="gmail_msg">
>     All the other targets which use the Newton series approximations<br class="gmail_msg">
>     include<br class="gmail_msg">
>     a Subtarget in TargetMatchine.  This change merely follows the pattern<br class="gmail_msg">
>     already found in the PowerPC and X86 ports.<br class="gmail_msg">
><br class="gmail_msg">
><br class="gmail_msg">
> This patch is definitely beyond the level of post-commit review for<br class="gmail_msg">
> areas you've typically touched and I'm asking you to revert it. In<br class="gmail_msg">
> addition, I'll ask Hal to revert the patch in r241985 while we come up<br class="gmail_msg">
> with a better implementation.<br class="gmail_msg">
><br class="gmail_msg">
>     Thus, if anything, the discussion should be broader than AArch64.<br class="gmail_msg">
>     Until<br class="gmail_msg">
>     that's settled, it's preferable to keep this patch until an universal<br class="gmail_msg">
>     solution is found, IMO.<br class="gmail_msg">
><br class="gmail_msg">
><br class="gmail_msg">
> This discussion has already happened when I did the work in the first<br class="gmail_msg">
> place to deal with function based subtargets and LTO. In addition, the<br class="gmail_msg">
> work that you've done has had a flaw explicitly pointed out - you'll<br class="gmail_msg">
> have different values that won't get reset between functions.<br class="gmail_msg">
><br class="gmail_msg">
> All subtarget dependent machinery is (unless the target really doesn't<br class="gmail_msg">
> care like most of the gpus) based on the function and you can't depend<br class="gmail_msg">
> upon a single subtarget for any TargetMachine. This means that, in<br class="gmail_msg">
> general, you also can't depend upon it for initializing the pass<br class="gmail_msg">
> structure or overall backend machinery.<br class="gmail_msg">
><br class="gmail_msg">
> As I mentioned before, during LTO if you compile two functions with<br class="gmail_msg">
> different cpu options and link them together you should get different<br class="gmail_msg">
> code and tuning, in this case you've now broken it for the reciprocal<br class="gmail_msg">
> code.<br class="gmail_msg">
><br class="gmail_msg">
> -eric<br class="gmail_msg">
><br class="gmail_msg">
>     Thank you,<br class="gmail_msg">
><br class="gmail_msg">
>     --<br class="gmail_msg">
>     Evandro Menezes<br class="gmail_msg">
><br class="gmail_msg">
>     On 09/19/16 19:49, Eric Christopher wrote:<br class="gmail_msg">
>     > Hi Evandro,<br class="gmail_msg">
>     ><br class="gmail_msg">
>     > I'm going to ask you to revert this patch please. There are a<br class="gmail_msg">
>     few reasons:<br class="gmail_msg">
>     ><br class="gmail_msg">
>     > a) I don't see a review thread here? This changes the port quite<br class="gmail_msg">
>     a bit.<br class="gmail_msg">
>     ><br class="gmail_msg">
>     ><br class="gmail_msg">
>     >      ///<br class="gmail_msg">
>     >      AArch64TargetMachine::AArch64TargetMachine(const Target &T,<br class="gmail_msg">
>     const<br class="gmail_msg">
>     >     Triple &TT,<br class="gmail_msg">
>     >     @@ -149,7 +173,8 @@ AArch64TargetMachine::AArch64TargetMachi<br class="gmail_msg">
>     >          : LLVMTargetMachine(T, computeDataLayout(TT, LittleEndian),<br class="gmail_msg">
>     >     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,<br class="gmail_msg">
>     >     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:<br class="gmail_msg">
>     ><br class="gmail_msg">
>     <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">
>      ==============================================================================<br class="gmail_msg">
>     >     --- llvm/trunk/lib/Target/AArch64/AArch64TargetMachine.h<br class="gmail_msg">
>     (original)<br class="gmail_msg">
>     >     +++ llvm/trunk/lib/Target/AArch64/AArch64TargetMachine.h Wed May<br class="gmail_msg">
>     >     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">
>     ><br class="gmail_msg">
>     > These changes aren't correct. There is no need and it's currently<br class="gmail_msg">
>     > invalid for the AArch64 port to depend on a single global subtarget<br class="gmail_msg">
>     > for all configuration. This is going to break anything that<br class="gmail_msg">
>     depends on<br class="gmail_msg">
>     > changing subtargets on a function by function basis (including<br class="gmail_msg">
>     > different -mcpu flags in different translation units or different<br class="gmail_msg">
>     > options).<br class="gmail_msg">
>     ><br class="gmail_msg">
>     > You're going to need to do all of these changes in a different<br class="gmail_msg">
>     way and<br class="gmail_msg">
>     > I haven't had time to look to see what's going on.<br class="gmail_msg">
>     ><br class="gmail_msg">
>     > Thanks!<br class="gmail_msg">
>     ><br class="gmail_msg">
>     > -eric<br class="gmail_msg">
>     ><br class="gmail_msg">
>     ><br class="gmail_msg">
>     >      // AArch64leTargetMachine - AArch64 little endian target<br class="gmail_msg">
>     machine.<br class="gmail_msg">
>     ><br class="gmail_msg">
>     >     Added: llvm/trunk/test/CodeGen/AArch64/recp-fastmath.ll<br class="gmail_msg">
>     >     URL:<br class="gmail_msg">
>     ><br class="gmail_msg">
>     <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">
>      ==============================================================================<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<br class="gmail_msg">
>     >     15:18:27 2016<br class="gmail_msg">
>     >     @@ -0,0 +1,79 @@<br class="gmail_msg">
>     >     +; RUN: llc < %s -mtriple=aarch64 -mattr=neon<br class="gmail_msg">
>     -recip=!div,!vec-div<br class="gmail_msg">
>     >     | FileCheck %s --check-prefix=FAULT<br class="gmail_msg">
>     >     +; RUN: llc < %s -mtriple=aarch64 -mattr=neon -recip=div,vec-div<br class="gmail_msg">
>     >      | 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<br class="gmail_msg">
>     1.0,<br class="gmail_msg">
>     >     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:<br class="gmail_msg">
>     ><br class="gmail_msg">
>     <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">
>      ==============================================================================<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<br class="gmail_msg">
>     >     15:18:27 2016<br class="gmail_msg">
>     >     @@ -0,0 +1,158 @@<br class="gmail_msg">
>     >     +; RUN: llc < %s -mtriple=aarch64 -mattr=neon<br class="gmail_msg">
>     >     -recip=!sqrt,!vec-sqrt | FileCheck %s --check-prefix=FAULT<br class="gmail_msg">
>     >     +; RUN: llc < %s -mtriple=aarch64 -mattr=neon<br class="gmail_msg">
>     >     -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<br class="gmail_msg">
>     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<br class="gmail_msg">
>     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<br class="gmail_msg">
>     double><br class="gmail_msg">
>     >     %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<br class="gmail_msg">
>     float> %a) #2<br class="gmail_msg">
>     >     +  %2 = fdiv fast <2 x float> <float 1.000000e+00, float<br class="gmail_msg">
>     >     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<br class="gmail_msg">
>     float> %a) #2<br class="gmail_msg">
>     >     +  %2 = fdiv fast <4 x float> <float 1.000000e+00, float<br class="gmail_msg">
>     >     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<br class="gmail_msg">
>     double><br class="gmail_msg">
>     >     %a) #2<br class="gmail_msg">
>     >     +  %2 = fdiv fast <2 x double> <double 1.000000e+00, double<br class="gmail_msg">
>     >     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> <mailto:<a href="mailto:llvm-commits@lists.llvm.org" class="gmail_msg" target="_blank">llvm-commits@lists.llvm.org</a>><br class="gmail_msg">
>     <mailto:<a href="mailto:llvm-commits@lists.llvm.org" class="gmail_msg" target="_blank">llvm-commits@lists.llvm.org</a><br class="gmail_msg">
>     <mailto:<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">
>     ><br class="gmail_msg">
><br class="gmail_msg">
<br class="gmail_msg">
</blockquote></div></div>