diff --git a/test/CodeGen/X86/2007-07-25-EpilogueBug.ll b/test/CodeGen/X86/2007-07-25-EpilogueBug.ll new file mode 100644 index 00000000000..a720bbb3277 --- /dev/null +++ b/test/CodeGen/X86/2007-07-25-EpilogueBug.ll @@ -0,0 +1,54 @@ +; RUN: llvm-as < %s | llc -mtriple=i686-pc-linux-gnu -mcpu=i386 | \ +; RUN: %prcontext ret 1 | grep FP_REG_KILL +; PR1573 + + %struct.c34006f__TsB = type { i8, i32, i32, %struct.c34006f__TsB___b___XVN } + %struct.c34006f__TsB___b___XVN = type { %struct.c34006f__TsB___b___XVN___O } + %struct.c34006f__TsB___b___XVN___O = type { float } + +define fastcc i8 @c34006f__pkg__parentEQ.213(%struct.c34006f__TsB* %x, %struct.c34006f__TsB* %y) zeroext { +entry: + %tmp190 = icmp eq i8 0, 0 ; [#uses=1] + %tmp207 = icmp eq i32 0, 0 ; [#uses=1] + %bothcond = and i1 %tmp190, %tmp207 ; [#uses=1] + %tmp224 = icmp eq i32 0, 0 ; [#uses=1] + %bothcond1 = and i1 %bothcond, %tmp224 ; [#uses=1] + br i1 %bothcond1, label %cond_next229, label %UnifiedReturnBlock + +cond_next229: ; preds = %entry + %tmp234 = icmp eq i8 0, 0 ; [#uses=1] + br i1 %tmp234, label %cond_false391, label %cond_true237 + +cond_true237: ; preds = %cond_next229 + %tmp268 = icmp sgt i32 0, -1 ; [#uses=2] + %max269 = select i1 %tmp268, i32 0, i32 0 ; [#uses=1] + %tmp305.op = add i32 0, -1 ; [#uses=1] + br i1 false, label %bb328, label %cond_next315 + +cond_next315: ; preds = %cond_true237 + ret i8 0 + +bb328: ; preds = %cond_true237 + %tmp337 = select i1 %tmp268, i32 %tmp305.op, i32 -1 ; [#uses=1] + %tmp347 = icmp eq i32 %tmp337, 0 ; [#uses=1] + br i1 %tmp347, label %cond_next351, label %UnifiedReturnBlock + +cond_next351: ; preds = %bb328 + %tmp354 = getelementptr %struct.c34006f__TsB* %y, i32 0, i32 3 ; <%struct.c34006f__TsB___b___XVN*> [#uses=1] + %tmp354355 = bitcast %struct.c34006f__TsB___b___XVN* %tmp354 to i8* ; [#uses=1] + %tmp358 = getelementptr %struct.c34006f__TsB* %x, i32 0, i32 3 ; <%struct.c34006f__TsB___b___XVN*> [#uses=1] + %tmp358359 = bitcast %struct.c34006f__TsB___b___XVN* %tmp358 to i8* ; [#uses=1] + %tmp360 = tail call i32 (i8*, i8*, i32, ...)* @memcmp( i8* %tmp358359, i8* %tmp354355, i32 %max269 ) ; [#uses=0] + ret i8 0 + +cond_false391: ; preds = %cond_next229 + %tmp400 = fcmp une float 0.000000e+00, 0.000000e+00 ; [#uses=1] + %not.tmp400 = xor i1 %tmp400, true ; [#uses=1] + %retval = zext i1 %not.tmp400 to i8 ; [#uses=1] + ret i8 %retval + +UnifiedReturnBlock: ; preds = %bb328, %entry + ret i8 0 +} + +declare i32 @memcmp(i8*, i8*, i32, ...)