[LLVMdev] Branch delay slots broken.

Bruno Cardoso Lopes bruno.cardoso at gmail.com
Sat Dec 18 09:17:15 PST 2010


I still can't reproduce because it's fixed in trunk for Mips and Sparc
for a long time now, you must be using a really old version! :)
Just for reference, it was fixed for Mips and Sparc in r108820 and r96492.
Thanks anyway!

On Fri, Dec 17, 2010 at 7:43 PM, Richard Pennington <rich at pennware.com> wrote:
> On 12/17/2010 02:01 PM, Bruno Cardoso Lopes wrote:
>>
>> Hi Richard,
>>
>>> You changes work for me also. I applied something similar to the Mips CG
>>> and they worked there also. Thanks again.
>>
>> I can't reproduce the same problem here for Mips using clang, could
>> you please attach the bitcode you used?
>> Thanks
>>
> Hi Bruno,
>
> This was the bitcode from a simple memset function:
>
> ; ModuleID = '../../../src/c/string/memset.c'
> target datalayout =
> "E-p:32:32:32-i1:8:8-i8:8:32-i16:16:32-i32:32:32-i64:32:64-f32:32:32-f64:64:64-v64:64:64-n32"
> target triple = "mips-ellcc-unknown"
>
> define i8* @memset(i8* %m, i32 %c, i32 %n) nounwind {
> entry:
>  %tobool5 = icmp eq i32 %n, 0
>  br i1 %tobool5, label %while.end, label %bb.nph
>
> bb.nph:                                           ; preds = %entry
>  %conv = trunc i32 %c to i8
>  br label %while.cond
>
> while.cond:                                       ; preds = %while.cond,
> %bb.nph
>  %indvar = phi i32 [ 0, %bb.nph ], [ %indvar.next, %while.cond ]
>  %s.07 = getelementptr i8* %m, i32 %indvar
>  store i8 %conv, i8* %s.07, align 1, !tbaa !0
>  %indvar.next = add i32 %indvar, 1
>  %exitcond = icmp eq i32 %indvar.next, %n
>  br i1 %exitcond, label %while.end, label %while.cond
>
> while.end:                                        ; preds = %while.cond,
> %entry
>  ret i8* %m
> }
>
> As I recall, it was the bb.nph label that was lost.
>
> -Rich
>



-- 
Bruno Cardoso Lopes
http://www.brunocardoso.cc




More information about the llvm-dev mailing list