Displaying 4 results from an estimated 4 matches for "shadow_stack_depth".
2009 Nov 13
0
[LLVMdev] opt -std-compile-opts breaks tail calls
On Nov 13, 2009, at 3:34 AM, Jon Harrop wrote:
>> Point 4 is the one that caused me trouble for some time.
>> Unfortunately
>> it causes a bad interaction with the optimiser, specifically the
>> 'simplifycfg' pass. What seems to happen is that since the function
>> you are calling is marked with 'noreturn', the simplifycfg pass will
>> then
2009 Nov 13
2
[LLVMdev] opt -std-compile-opts breaks tail calls
...LVM?
>
> Yes, please file a bugzilla with a small example.
I think I may be having a similar problem, albeit with with noalias rather
than noreturn. This is my tail recursive function:
define fastcc noalias i8* @fold_aux(%2*, i32, i8* (%2*, %2, double)*, %2, %0)
{
entry:
%5 = load i32* @shadow_stack_depth ; <i32> [#uses=4]
%6 = alloca %2, align 8 ; <%2*> [#uses=2]
%7 = load %0* @shadow_stack ; <%0> [#uses=1]
%8 = extractvalue %0 %7, 2 ; <i8*> [#uses=1]
%9 = bitcast i8* %8 to %0*...
2009 Nov 13
2
[LLVMdev] opt -std-compile-opts breaks tail calls
On Friday 13 November 2009 04:57:43 David Terei wrote:
> I've run into some issues with tail calls in the past, make sure you
> are doing the following:
>
> 1. Call should be marked with tail (obviously)
> 2. Next statement after tail call should be 'return void'
> 3. Use fast call convention for tail calls
> 4. Make sure the function you are calling doesn't
2009 Nov 20
2
[LLVMdev] llc barfing
...39;@"fill<`Reference>"'
Aborted
Are these barfs due to bugs in my generated code or is this parts of LLVM not
honoring tail calls?
Here's the IR of my relevant functions:
define fastcc i8* @"visit_array_aux<`Reference>"(%0, i32) {
entry:
%2 = load i32* @shadow_stack_depth ; <i32> [#uses=0]
br label %start
start: ; preds = %entry
%3 = extractvalue %0 %0, 1 ; <i32> [#uses=1]
%4 = icmp eq i32 %1, %3 ; <i1> [#uses=1]
br i1 %4, label %pass, labe...