mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-13 23:18:51 +00:00
e52954eb4a
The test case will crash without this patch because the subsequent call to hasUnsafeAlgebra() assumes that the call instruction is an FPMathOperator (ie, returns an FP type). This part of the function signature check was omitted for the sqrt() case, but seems to be in place for all other transforms. Before: http://reviews.llvm.org/rL257400 ...we would have needlessly continued execution in optimizeSqrt(), but the bug was harmless because we'd eventually fail some other check and return without damage. This should fix: https://llvm.org/bugs/show_bug.cgi?id=26211 Differential Revision: http://reviews.llvm.org/D16198 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@258325 91177308-0d34-0410-b5e6-96231b3b80d8
28 lines
772 B
LLVM
28 lines
772 B
LLVM
; RUN: opt < %s -instcombine -S | FileCheck %s
|
|
|
|
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
|
|
|
|
declare float @cos(double)
|
|
declare signext i8 @sqrt(...)
|
|
|
|
; Check that functions with the wrong prototype aren't simplified.
|
|
|
|
define float @test_no_simplify1(double %d) {
|
|
; CHECK-LABEL: @test_no_simplify1(
|
|
%neg = fsub double -0.000000e+00, %d
|
|
%cos = call float @cos(double %neg)
|
|
; CHECK: call float @cos(double %neg)
|
|
ret float %cos
|
|
}
|
|
|
|
|
|
define i8 @bogus_sqrt() {
|
|
%fake_sqrt = call signext i8 (...) @sqrt()
|
|
ret i8 %fake_sqrt
|
|
|
|
; CHECK-LABEL: bogus_sqrt(
|
|
; CHECK-NEXT: %fake_sqrt = call signext i8 (...) @sqrt()
|
|
; CHECK-NEXT: ret i8 %fake_sqrt
|
|
}
|
|
|