[llvm] r197554 - ARM: set default float ABI based on triple.

Justin Bogner mail at justinbogner.com
Wed Dec 18 05:06:45 PST 2013


On Wednesday, December 18, 2013, Tim Northover wrote:

> Author: tnorthover
> Date: Wed Dec 18 03:27:33 2013
> New Revision: 197554
>
> URL: http://llvm.org/viewvc/llvm-project?rev=197554&view=rev
> Log:
> ARM: set default float ABI based on triple.
>
> Clang sets the float-abi target option manually, but no longer
> annotates each function with its ABI. This can lead to confusing
> mistmatch between "clang -emit-llvm | llc" and normal clang
> invocations.
>
> Besides which, gnueabihf actually *is* hard-float. Defaulting to soft
> was just perverse.
>
> Added:
>     llvm/trunk/test/CodeGen/ARM/default-float-abi.ll
> Modified:
>     llvm/trunk/lib/Target/ARM/ARMSubtarget.h
>     llvm/trunk/lib/Target/ARM/ARMTargetMachine.cpp
>
> Modified: llvm/trunk/lib/Target/ARM/ARMSubtarget.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMSubtarget.h?rev=197554&r1=197553&r2=197554&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/ARM/ARMSubtarget.h (original)
> +++ llvm/trunk/lib/Target/ARM/ARMSubtarget.h Wed Dec 18 03:27:33 2013
> @@ -321,6 +321,11 @@ public:
>        TargetTriple.getEnvironment() == Triple::EABIHF;
>    }
>
> +  bool isTargetHardFloat() const {
> +    return TargetTriple.getEnvironment() == Triple::GNUEABIHF ||
> +           TargetTriple.getEnvironment() == Triple::EABIHF;
> +  }
> +
>    bool isAPCS_ABI() const { return TargetABI == ARM_ABI_APCS; }
>    bool isAAPCS_ABI() const { return TargetABI == ARM_ABI_AAPCS; }
>
>
> Modified: llvm/trunk/lib/Target/ARM/ARMTargetMachine.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMTargetMachine.cpp?rev=197554&r1=197553&r2=197554&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/ARM/ARMTargetMachine.cpp (original)
> +++ llvm/trunk/lib/Target/ARM/ARMTargetMachine.cpp Wed Dec 18 03:27:33 2013
> @@ -53,7 +53,8 @@ ARMBaseTargetMachine::ARMBaseTargetMachi
>      InstrItins(Subtarget.getInstrItineraryData()) {
>    // Default to soft float ABI
>    if (Options.FloatABIType == FloatABI::Default)
> -    this->Options.FloatABIType = FloatABI::Soft;
> +    this->Options.FloatABIType =
> +        Subtarget.isTargetHardFloat() ? FloatABI::Hard : FloatABI::Soft;
>  }


 Update the comment just above to match the new logic, please.

 void ARMBaseTargetMachine::addAnalysisPasses(PassManagerBase &PM) {
>
> Added: llvm/trunk/test/CodeGen/ARM/default-float-abi.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/default-float-abi.ll?rev=197554&view=auto
>
> ==============================================================================
> --- llvm/trunk/test/CodeGen/ARM/default-float-abi.ll (added)
> +++ llvm/trunk/test/CodeGen/ARM/default-float-abi.ll Wed Dec 18 03:27:33
> 2013
> @@ -0,0 +1,22 @@
> +; RUN: llc -mtriple=armv7-linux-gnueabihf %s -o - | FileCheck %s
> --check-prefix=CHECK-HARD
> +; RUN: llc -mtriple=armv7-linux-eabihf %s -o - | FileCheck %s
> --check-prefix=CHECK-HARD
> +; RUN: llc -mtriple=armv7-linux-gnueabihf -float-abi=soft %s -o - |
> FileCheck %s --check-prefix=CHECK-SOFT
> +; RUN: llc -mtriple=armv7-linux-gnueabi %s -o - | FileCheck %s
> --check-prefix=CHECK-SOFT
> +; RUN: llc -mtriple=armv7-linux-eabi -float-abi=hard %s -o - | FileCheck
> %s --check-prefix=CHECK-HARD
> +; RUN: llc -mtriple=thumbv7-apple-ios6.0 %s -o - | FileCheck %s
> --check-prefix=CHECK-SOFT
> +
> +define float @test_abi(float %lhs, float %rhs) {
> +  %sum = fadd float %lhs, %rhs
> +  ret float %sum
> +
> +; CHECK-HARD-LABEL: test_abi:
> +; CHECK-HARD-NOT: vmov
> +; CHECK-HARD: vadd.f32 s0, s0, s1
> +; CHECK-HARD-NOT: vmov
> +
> +; CHECK-SOFT-LABEL: test_abi:
> +; CHECK-SOFT-DAG: vmov [[LHS:s[0-9]+]], r0
> +; CHECK-SOFT-DAG: vmov [[RHS:s[0-9]+]], r1
> +; CHECK-SOFT: vadd.f32 [[DEST:s[0-9]+]], [[LHS]], [[RHS]]
> +; CHECK-SOFT: vmov r0, [[DEST]]
> +}
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu <javascript:;>
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20131218/a076e50d/attachment.html>


More information about the llvm-commits mailing list