llvmjp
2010-Nov-29 20:29 UTC
[LLVMdev] Sparc regression in V119382 "pseudo instruction expansion"
The following code compiles for Sparc prior to version 119382 but causes
a llc to hang in version 119382 and later. I glanced at it but haven't
figure it out yet. I figure I'd ping the list to see if it's an obvious
fix to someone else.
define void @test(i16 %di, i32 %L_num, i32 %tmp1, i16* %P) {
%X = shl i16 %di, 1 ; <i16> [#uses=1]
%tmp28 = shl i32 %L_num, 1 ; <i32> [#uses=1]
%tmp31 = icmp slt i32 %tmp28, %tmp1 ; <i1> [#uses=1]
%tmp31.upgrd = zext i1 %tmp31 to i16 ; <i16> [#uses=1]
%tmp371 = or i16 %tmp31.upgrd, %X ; <i16> [#uses=1]
%div.0.be.i.i.i.i = xor i16 %tmp371, 1 ; <i16> [#uses=1]
store i16 %div.0.be.i.i.i.i, i16* %P
ret void
}
llvmjp
2010-Nov-29 20:34 UTC
[LLVMdev] Sparc regression in V119382 "pseudo instruction expansion"
To follow up I think it may be a bug in Sparc's EmitInstrWithCustomInserter but I'm getting distracted by some other stuff. On 11/29/10 1:29 PM, llvmjp wrote:> The following code compiles for Sparc prior to version 119382 but causes > a llc to hang in version 119382 and later. I glanced at it but haven't > figure it out yet. I figure I'd ping the list to see if it's an obvious > fix to someone else. > > define void @test(i16 %di, i32 %L_num, i32 %tmp1, i16* %P) { > %X = shl i16 %di, 1 ; <i16> [#uses=1] > %tmp28 = shl i32 %L_num, 1 ; <i32> [#uses=1] > %tmp31 = icmp slt i32 %tmp28, %tmp1 ; <i1> [#uses=1] > %tmp31.upgrd = zext i1 %tmp31 to i16 ; <i16> [#uses=1] > %tmp371 = or i16 %tmp31.upgrd, %X ; <i16> [#uses=1] > %div.0.be.i.i.i.i = xor i16 %tmp371, 1 ; <i16> [#uses=1] > store i16 %div.0.be.i.i.i.i, i16* %P > ret void > }