X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=test%2FCodeGen%2FX86%2F2008-10-27-CoalescerBug.ll;h=b1dcd031265b58d3c9e8017629522b2c19c368b4;hb=f0cbe326ff06b9d02528c4057f49de304385b436;hp=2c8e12fb26ff770d1cd8d7b0495abdad4ee860b3;hpb=b3990d5e948769a16d4ee77dbdff8a2bed8fb126;p=oota-llvm.git diff --git a/test/CodeGen/X86/2008-10-27-CoalescerBug.ll b/test/CodeGen/X86/2008-10-27-CoalescerBug.ll index 2c8e12fb26f..b1dcd031265 100644 --- a/test/CodeGen/X86/2008-10-27-CoalescerBug.ll +++ b/test/CodeGen/X86/2008-10-27-CoalescerBug.ll @@ -1,6 +1,10 @@ -; RUN: llvm-as < %s | llc -march=x86 -mattr=+sse2 -stats |& not grep {Number of register spills} +; REQUIRES: asserts +; RUN: llc < %s -mtriple=i386-apple-darwin -mattr=+sse2 -stats 2>&1 | FileCheck %s +; Now this test spills one register. But a reload in the loop is cheaper than +; the divsd so it's a win. define fastcc void @fourn(double* %data, i32 %isign) nounwind { +; CHECK: fourn entry: br label %bb @@ -11,8 +15,12 @@ bb: ; preds = %bb, %entry %1 = icmp sgt i32 %0, 2 ; [#uses=1] br i1 %1, label %bb30.loopexit, label %bb +; CHECK: %bb30.loopexit +; CHECK: divsd %xmm0 +; CHECK: movsd %xmm0, 16(%esp) +; CHECK: %bb3 bb3: ; preds = %bb30.loopexit, %bb25, %bb3 - %2 = load i32* null, align 4 ; [#uses=1] + %2 = load i32, i32* null, align 4 ; [#uses=1] %3 = mul i32 %2, 0 ; [#uses=1] %4 = icmp slt i32 0, %3 ; [#uses=1] br i1 %4, label %bb18, label %bb3 @@ -26,7 +34,7 @@ bb22.preheader: ; preds = %bb24.preheader, %bb22.preheader br label %bb22.preheader bb25: ; preds = %bb24.preheader - %7 = mul double 0.000000e+00, %6 ; [#uses=0] + %7 = fmul double 0.000000e+00, %6 ; [#uses=0] %8 = add i32 %i3.122100, 0 ; [#uses=1] %9 = icmp sgt i32 %8, 0 ; [#uses=1] br i1 %9, label %bb3, label %bb24.preheader @@ -37,7 +45,7 @@ bb24.preheader: ; preds = %bb25, %bb18 br i1 %10, label %bb25, label %bb22.preheader bb30.loopexit: ; preds = %bb - %11 = mul double 0.000000e+00, 0x401921FB54442D1C ; [#uses=1] + %11 = fmul double 0.000000e+00, 0x401921FB54442D1C ; [#uses=1] br label %bb3 }