[llvm] r203575 - ARM: enable tail call optimisation on Thumb 2

Saleem Abdulrasool compnerd at compnerd.org
Tue Mar 11 14:22:38 PDT 2014


On Tue, Mar 11, 2014 at 8:24 AM, JF Bastien <jfb at google.com> wrote:

> Hi Saleem,
>
> If I understand correctly this isn't just for Thumb2, it's also for ARM?
>

Correct, it is for ARM when not in Thumb v1 mode.


>
> On Tue, Mar 11, 2014 at 8:09 AM, Saleem Abdulrasool <compnerd at compnerd.org
> > wrote:
>
>> Author: compnerd
>> Date: Tue Mar 11 10:09:44 2014
>> New Revision: 203575
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=203575&view=rev
>> Log:
>> ARM: enable tail call optimisation on Thumb 2
>>
>> Tail call optimisation was previously disabled on all targets other than
>> iOS5.0+.  This enables the tail call optimisation on all Thumb 2 capable
>> platforms.
>>
>> The test adjustments are to remove the IR hint "tail" to function
>> invocation.
>> The tests were designed assuming that tail call optimisations would not
>> kick in
>> which no longer holds true.
>>
>> Modified:
>>     llvm/trunk/lib/Target/ARM/ARMSubtarget.cpp
>>     llvm/trunk/test/CodeGen/ARM/2013-04-16-AAPCS-C4-vs-VFP.ll
>>     llvm/trunk/test/CodeGen/ARM/2014-02-21-byval-reg-split-alignment.ll
>>     llvm/trunk/test/CodeGen/ARM/debug-frame.ll
>>     llvm/trunk/test/CodeGen/ARM/ehabi.ll
>>     llvm/trunk/test/CodeGen/ARM/v1-constant-fold.ll
>>
>> Modified: llvm/trunk/lib/Target/ARM/ARMSubtarget.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMSubtarget.cpp?rev=203575&r1=203574&r2=203575&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/lib/Target/ARM/ARMSubtarget.cpp (original)
>> +++ llvm/trunk/lib/Target/ARM/ARMSubtarget.cpp Tue Mar 11 10:09:44 2014
>> @@ -219,8 +219,10 @@ void ARMSubtarget::resetSubtargetFeature
>>    if (isTargetMachO()) {
>>      IsR9Reserved = ReserveR9 | !HasV6Ops;
>>      SupportsTailCall = !isTargetIOS() ||
>> !getTargetTriple().isOSVersionLT(5, 0);
>> -  } else
>> +  } else {
>>      IsR9Reserved = ReserveR9;
>> +    SupportsTailCall = !isThumb1Only();
>> +  }
>>
>>    if (!isThumb() || hasThumb2())
>>      PostRAScheduler = true;
>>
>> Modified: llvm/trunk/test/CodeGen/ARM/2013-04-16-AAPCS-C4-vs-VFP.ll
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/2013-04-16-AAPCS-C4-vs-VFP.ll?rev=203575&r1=203574&r2=203575&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/test/CodeGen/ARM/2013-04-16-AAPCS-C4-vs-VFP.ll (original)
>> +++ llvm/trunk/test/CodeGen/ARM/2013-04-16-AAPCS-C4-vs-VFP.ll Tue Mar 11
>> 10:09:44 2014
>> @@ -72,7 +72,7 @@ define void @foo(double %p0, ; --> D0
>>                  double %p8, ; --> Stack
>>                  i32 %p9) #0 { ; --> R0, not Stack+8
>>  entry:
>> -  tail call void @fooUseI32(i32 %p9)
>> +  call void @fooUseI32(i32 %p9)
>>    ret void
>>  }
>>
>>
>> Modified:
>> llvm/trunk/test/CodeGen/ARM/2014-02-21-byval-reg-split-alignment.ll
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/2014-02-21-byval-reg-split-alignment.ll?rev=203575&r1=203574&r2=203575&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/test/CodeGen/ARM/2014-02-21-byval-reg-split-alignment.ll
>> (original)
>> +++ llvm/trunk/test/CodeGen/ARM/2014-02-21-byval-reg-split-alignment.ll
>> Tue Mar 11 10:09:44 2014
>> @@ -23,7 +23,7 @@ define void @foo1(i32 %a, %struct12bytes
>>  ; CHECK: pop  {r11, lr}
>>  ; CHECK: add  sp, sp, #16
>>
>> -  tail call void @useLong(i64 %c)
>> +  call void @useLong(i64 %c)
>>    ret void
>>  }
>>
>> @@ -40,7 +40,7 @@ define void @foo2(i32 %a, %struct8bytes8
>>  ; CHECK: pop  {r11, lr}
>>  ; CHECK: add  sp, sp, #8
>>
>> -  tail call void @usePtr(%struct8bytes8align* %b)
>> +  call void @usePtr(%struct8bytes8align* %b)
>>    ret void
>>  }
>>
>> @@ -57,7 +57,7 @@ define void @foo3(%struct8bytes8align* b
>>  ; CHECK: pop  {r11, lr}
>>  ; CHECK: add  sp, sp, #16
>>
>> -  tail call void @usePtr(%struct8bytes8align* %a)
>> +  call void @usePtr(%struct8bytes8align* %a)
>>    ret void
>>  }
>>
>> @@ -76,7 +76,7 @@ define void @foo4(%struct4bytes* byval %
>>  ; CHECK: add     sp, sp, #16
>>  ; CHECK: mov     pc, lr
>>
>> -  tail call void @usePtr(%struct8bytes8align* %b)
>> +  call void @usePtr(%struct8bytes8align* %b)
>>    ret void
>>  }
>>
>> @@ -95,7 +95,7 @@ define void @foo5(%struct8bytes8align* b
>>  ; CHECK: add     sp, sp, #16
>>  ; CHECK: mov     pc, lr
>>
>> -  tail call void @usePtr(%struct8bytes8align* %a)
>> +  call void @usePtr(%struct8bytes8align* %a)
>>    ret void
>>  }
>>
>> @@ -109,6 +109,6 @@ define void @foo6(i32 %a, i32 %b, i32 %c
>>  ; CHECK: pop  {r11, lr}
>>  ; CHECK: mov  pc, lr
>>
>> -  tail call void @usePtr(%struct8bytes8align* %d)
>> +  call void @usePtr(%struct8bytes8align* %d)
>>    ret void
>>  }
>>
>> Modified: llvm/trunk/test/CodeGen/ARM/debug-frame.ll
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/debug-frame.ll?rev=203575&r1=203574&r2=203575&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/test/CodeGen/ARM/debug-frame.ll (original)
>> +++ llvm/trunk/test/CodeGen/ARM/debug-frame.ll Tue Mar 11 10:09:44 2014
>> @@ -301,7 +301,7 @@ declare void @throw_exception_2()
>>
>>  define void @test2() {
>>  entry:
>> -  tail call void @throw_exception_2()
>> +  call void @throw_exception_2()
>>    ret void
>>  }
>>
>>
>> Modified: llvm/trunk/test/CodeGen/ARM/ehabi.ll
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/ehabi.ll?rev=203575&r1=203574&r2=203575&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/test/CodeGen/ARM/ehabi.ll (original)
>> +++ llvm/trunk/test/CodeGen/ARM/ehabi.ll Tue Mar 11 10:09:44 2014
>> @@ -181,7 +181,7 @@ declare void @throw_exception_2()
>>
>>  define void @test2() {
>>  entry:
>> -  tail call void @throw_exception_2()
>> +  call void @throw_exception_2()
>>    ret void
>>  }
>>
>>
>> Modified: llvm/trunk/test/CodeGen/ARM/v1-constant-fold.ll
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/v1-constant-fold.ll?rev=203575&r1=203574&r2=203575&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/test/CodeGen/ARM/v1-constant-fold.ll (original)
>> +++ llvm/trunk/test/CodeGen/ARM/v1-constant-fold.ll Tue Mar 11 10:09:44
>> 2014
>> @@ -1,4 +1,4 @@
>> -; RUN: llc < %s -mtriple=armv7-none-linux-gnueabi -mattr=+v7,+vfp3,-neon
>>  | FileCheck %s
>> +; RUN: llc < %s -mtriple=armv7-none-linux-gnueabi -mattr=+v7,+vfp3,-neon
>> | FileCheck %s
>>
>>  ; PR15611. Check that we don't crash when constant folding v1i32 types.
>>
>> @@ -11,7 +11,7 @@ bb:
>>    %tmp3 = insertelement <4 x i32> %tmp2, i32 0, i32 3
>>    %tmp4 = add <4 x i32> %tmp3, <i32 -1, i32 -1, i32 -1, i32 -1>
>>  ; CHECK:  bl bar
>> -  tail call void @bar(<4 x i32> %tmp4)
>> +  call void @bar(<4 x i32> %tmp4)
>>    ret void
>>  }
>>
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>
>
>


-- 
Saleem Abdulrasool
compnerd (at) compnerd (dot) org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140311/97d4b2d8/attachment.html>


More information about the llvm-commits mailing list