mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-04-07 16:42:07 +00:00
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 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@175853 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
667754e239
commit
b704ffbb46
@ -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.
|
||||
|
32
test/CodeGen/X86/fast-isel-constant.ll
Normal file
32
test/CodeGen/X86/fast-isel-constant.ll
Normal file
@ -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
|
||||
}
|
||||
|
||||
declare {i32, i1} @llvm.sadd.with.overflow.i32(i32, i32)
|
Loading…
x
Reference in New Issue
Block a user