[PATCH] D18863: Propagate Undef in llvm.cos Intrinsic
Sanjoy Das via llvm-commits
llvm-commits at lists.llvm.org
Fri Apr 8 11:26:42 PDT 2016
This revision was automatically updated to reflect the committed changes.
Closed by commit rL265825: Propagate Undef in llvm.cos Intrinsic (authored by sanjoy).
Changed prior to commit:
http://reviews.llvm.org/D18863?vs=52940&id=53051#toc
Repository:
rL LLVM
http://reviews.llvm.org/D18863
Files:
llvm/trunk/lib/Analysis/ConstantFolding.cpp
llvm/trunk/test/Transforms/InstCombine/cos-intrinsic.ll
Index: llvm/trunk/test/Transforms/InstCombine/cos-intrinsic.ll
===================================================================
--- llvm/trunk/test/Transforms/InstCombine/cos-intrinsic.ll
+++ llvm/trunk/test/Transforms/InstCombine/cos-intrinsic.ll
@@ -0,0 +1,26 @@
+; RUN: opt < %s -instcombine -S | FileCheck %s
+; This test makes sure that the undef is propagated for the cos instrinsic
+
+declare double @llvm.cos.f64(double %Val)
+declare float @llvm.cos.f32(float %Val)
+
+; Function Attrs: nounwind readnone
+define double @test1() {
+; CHECK-LABEL: define double @test1(
+; CHECK-NEXT: ret double 0.000000e+00
+ %1 = call double @llvm.cos.f64(double undef)
+ ret double %1
+}
+
+
+; Function Attrs: nounwind readnone
+define float @test2(float %d) {
+; CHECK-LABEL: define float @test2(
+; CHECK-NEXT: %cosval = call float @llvm.cos.f32(float %d)
+ %cosval = call float @llvm.cos.f32(float %d)
+ %cosval2 = call float @llvm.cos.f32(float undef)
+ %fsum = fadd float %cosval2, %cosval
+ ret float %fsum
+; CHECK-NEXT: %fsum
+; CHECK: ret float %fsum
+}
Index: llvm/trunk/lib/Analysis/ConstantFolding.cpp
===================================================================
--- llvm/trunk/lib/Analysis/ConstantFolding.cpp
+++ llvm/trunk/lib/Analysis/ConstantFolding.cpp
@@ -1443,6 +1443,11 @@
ArrayRef<Constant *> Operands,
const TargetLibraryInfo *TLI) {
if (Operands.size() == 1) {
+ if (isa<UndefValue>(Operands[0])) {
+ // cosine(arg) is between -1 and 1. cosine(invalid arg) is NaN
+ if (IntrinsicID == Intrinsic::cos)
+ return Constant::getNullValue(Ty);
+ }
if (ConstantFP *Op = dyn_cast<ConstantFP>(Operands[0])) {
if (IntrinsicID == Intrinsic::convert_to_fp16) {
APFloat Val(Op->getValueAPF());
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D18863.53051.patch
Type: text/x-patch
Size: 1848 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160408/89b043cd/attachment.bin>
More information about the llvm-commits
mailing list