[llvm] r175853 - Fix isa<> check which could never be true.

Dmitri Gribenko gribozavr at gmail.com
Fri Feb 22 00:04:04 PST 2013


On Fri, Feb 22, 2013 at 3:50 AM, Pete Cooper <peter_cooper at apple.com> wrote:
> Author: pete
> Date: Thu Feb 21 19:50:38 2013
> New Revision: 175853
>
> URL: http://llvm.org/viewvc/llvm-project?rev=175853&view=rev
> Log:
> Fix isa<> check which could never be true.
>
> It was incorrectly checking a Function* being an IntrinsicInst* which
> isn't possible.  It should always have been checking the CallInst* instead.
>
> Added test case for x86 which ensures we only get one constant load.
> It was 2 before this change.
>
> rdar://problem/13267920
>
> Added:
>     llvm/trunk/test/CodeGen/X86/fast-isel-constant.ll
> Modified:
>     llvm/trunk/lib/CodeGen/SelectionDAG/FastISel.cpp
>
> Modified: llvm/trunk/lib/CodeGen/SelectionDAG/FastISel.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/FastISel.cpp?rev=175853&r1=175852&r2=175853&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/SelectionDAG/FastISel.cpp (original)
> +++ llvm/trunk/lib/CodeGen/SelectionDAG/FastISel.cpp Thu Feb 21 19:50:38 2013
> @@ -705,7 +705,7 @@ bool FastISel::SelectCall(const User *I)
>    // all the values which have already been materialized,
>    // appear after the call. It also makes sense to skip intrinsics
>    // since they tend to be inlined.
> -  if (!isa<IntrinsicInst>(F))
> +  if (!isa<IntrinsicInst>(Call))
>      flushLocalValueMap();
>
>    // An arbitrary call. Bail.
>
> Added: llvm/trunk/test/CodeGen/X86/fast-isel-constant.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/fast-isel-constant.ll?rev=175853&view=auto
> ==============================================================================
> --- llvm/trunk/test/CodeGen/X86/fast-isel-constant.ll (added)
> +++ llvm/trunk/test/CodeGen/X86/fast-isel-constant.ll Thu Feb 21 19:50:38 2013
> @@ -0,0 +1,32 @@
> +; RUN: llc < %s -march=x86-64 -O0 | FileCheck %s
> +; Make sure fast-isel doesn't reset the materialised constant map
> +; across an intrinsic call.
> +
> +; CHECK: movl  $100000
> +; CHECK-NOT: movl      $100000
> +define i1 @test1(i32 %v1, i32 %v2, i32* %X) nounwind {
> +entry:
> +  %a = shl i32 100000, %v1
> +  %t = call {i32, i1} @llvm.sadd.with.overflow.i32(i32 %a, i32 %v2)
> +  %ext = extractvalue {i32, i1} %t, 0
> +  %sum = shl i32 100000, %ext
> +  %obit = extractvalue {i32, i1} %t, 1
> +  br i1 %obit, label %overflow, label %normal
> +
> +normal:
> +  store i32 %sum, i32* %X
> +  br label %overflow
> +
> +overflow:
> +  ret i1 false
> +
> +; X32: test4:
> +; X32: addl
> +; X32-NEXT: jo
> +
> +; X64:        test4:
> +; X64:          addl   %e[[A1:si|dx]], %e[[A0:di|cx]]
> +; X64-NEXT:    jo

These X32 and X64 lines look unused; did you mean to delete them?

Dmitri

-- 
main(i,j){for(i=2;;i++){for(j=2;j<i;j++){if(!(i%j)){j=0;break;}}if
(j){printf("%d\n",i);}}} /*Dmitri Gribenko <gribozavr at gmail.com>*/



More information about the llvm-commits mailing list