[llvm] r198019 - [Mips] Does not take in account 'use-soft-float' attribute's value when
reed kotler
rkotler at mips.com
Mon Sep 29 14:18:49 PDT 2014
Hi Eric,
It's been a while since I worked on Mips16 floating point.
Be careful though because in LLVM target independent terms, Mips16 hard
float is still soft float;
the difference just being which version of the fp emulation library is
being used.
When Mips16 hard float is on, there is a lot of difference though
internally to the Mips specific targe code.
Be careful in this area too because it's very complicated and we have
this ability to switch between Mips16 and Mips32
in the same .c file and that was tricky for me to get to work within LLVM.
There is one test that is failing locally for us that started to fail
around the time when you were making changes
and it may be unrelated to that, but it's a test for this dual 32/16
mode switching ability. I have been busy and
did not look at this failure yet because I did not know about it when it
first happened because we had some other
issues unrelated to that in our local build bots at exactly that moment
that masked the problem.
This patch Simon made was to fix some problem we had in Mips16 build
bots for test-suite and I think it's correct
and for sure fixed the problem we were having. But I don't remember any
of the issues.
I will try and find some time later this week to really think about this
and remember the issues.
Reed
On 09/29/2014 12:18 AM, Eric Christopher wrote:
> Hi Simon,
>
> Sorry for the thread necromancy here, but I don't think this patch is correct.
>
> a) It's a bit confusing that you have bar_hf for the function with
> use-soft-float set to true and vice versa for bar_sf, but
> b) As far as I can recall, the stubs are only used for calling hard
> float functions but the testcase currently tests that we emit it for
> both.
> c) The emission of the stubs should be dependent upon the subtarget
> and the value of the soft-float on the function (which would be the
> TM.Options.UseSoftFloat that is reset between each function, but only
> in SelectionDAG or the version in the function attributes).
>
> With the work I've been doing plus the attached patch we'll get this
> as far as I can tell correct for this - it's been a while since I've
> hacked on this aspect of mips.
>
> -eric
>
>
> On Wed, Dec 25, 2013 at 9:00 AM, Simon Atanasyan <simon at atanasyan.com> wrote:
>> Author: atanasyan
>> Date: Wed Dec 25 11:00:27 2013
>> New Revision: 198019
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=198019&view=rev
>> Log:
>> [Mips] Does not take in account 'use-soft-float' attribute's value when
>> consider to generate stubs for mips16 hard-float mode.
>>
>> The patch reviewed by Reed Kotler.
>>
>> Added:
>> llvm/trunk/test/CodeGen/Mips/mips16-hf-attr.ll
>> Modified:
>> llvm/trunk/lib/Target/Mips/Mips16ISelLowering.cpp
>>
>> Modified: llvm/trunk/lib/Target/Mips/Mips16ISelLowering.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/Mips16ISelLowering.cpp?rev=198019&r1=198018&r2=198019&view=diff
>> ==============================================================================
>> --- llvm/trunk/lib/Target/Mips/Mips16ISelLowering.cpp (original)
>> +++ llvm/trunk/lib/Target/Mips/Mips16ISelLowering.cpp Wed Dec 25 11:00:27 2013
>> @@ -429,8 +429,7 @@ getOpndList(SmallVectorImpl<SDValue> &Op
>> const char* Mips16HelperFunction = 0;
>> bool NeedMips16Helper = false;
>>
>> - if (getTargetMachine().Options.UseSoftFloat &&
>> - Subtarget->inMips16HardFloat()) {
>> + if (Subtarget->inMips16HardFloat()) {
>> //
>> // currently we don't have symbols tagged with the mips16 or mips32
>> // qualifier so we will assume that we don't know what kind it is.
>>
>> Added: llvm/trunk/test/CodeGen/Mips/mips16-hf-attr.ll
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Mips/mips16-hf-attr.ll?rev=198019&view=auto
>> ==============================================================================
>> --- llvm/trunk/test/CodeGen/Mips/mips16-hf-attr.ll (added)
>> +++ llvm/trunk/test/CodeGen/Mips/mips16-hf-attr.ll Wed Dec 25 11:00:27 2013
>> @@ -0,0 +1,45 @@
>> +; Check that stubs generation for mips16 hard-float mode does not depend
>> +; on the function 'use-soft-float' attribute's value.
>> +; RUN: llc -mtriple=mipsel-linux-gnu -march=mipsel \
>> +; RUN: -mcpu=mips16 -relocation-model=pic < %s | FileCheck %s
>> +
>> +define void @bar_sf() #0 {
>> +; CHECK: bar_sf:
>> +entry:
>> + %call1 = call float @foo(float 1.000000e+00)
>> +; CHECK: lw $2, %call16(foo)($3)
>> +; CHECK: lw $5, %got(__mips16_call_stub_sf_1)($3)
>> + ret void
>> +}
>> +
>> +define void @bar_hf() #1 {
>> +; CHECK: bar_hf:
>> +entry:
>> + %call1 = call float @foo(float 1.000000e+00)
>> +; CHECK: lw $2, %call16(foo)($3)
>> +; CHECK: lw $5, %got(__mips16_call_stub_sf_1)($3)
>> + ret void
>> +}
>> +
>> +declare float @foo(float) #2
>> +
>> +attributes #0 = {
>> + nounwind
>> + "less-precise-fpmad"="false" "no-frame-pointer-elim"="true"
>> + "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false"
>> + "no-nans-fp-math"="false" "stack-protector-buffer-size"="8"
>> + "unsafe-fp-math"="false" "use-soft-float"="false"
>> +}
>> +attributes #1 = {
>> + nounwind
>> + "less-precise-fpmad"="false" "no-frame-pointer-elim"="true"
>> + "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false"
>> + "no-nans-fp-math"="false" "stack-protector-buffer-size"="8"
>> + "unsafe-fp-math"="false" "use-soft-float"="true"
>> +}
>> +attributes #2 = {
>> + "less-precise-fpmad"="false" "no-frame-pointer-elim"="true"
>> + "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false"
>> + "no-nans-fp-math"="false" "stack-protector-buffer-size"="8"
>> + "unsafe-fp-math"="false" "use-soft-float"="true"
>> +}
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list