svn commit: r288195 - projects/clang370-import/contrib/llvm/include/llvm/Analysis

Dimitry Andric dim at FreeBSD.org
Thu Sep 24 21:20:01 UTC 2015


Author: dim
Date: Thu Sep 24 21:20:00 2015
New Revision: 288195
URL: https://svnweb.freebsd.org/changeset/base/288195

Log:
  Pull in r248439 from upstream llvm trunk (by Sanjay Patel):
  
    set div/rem default values to 'expensive' in TargetTransformInfo's
    cost model
  
    ...because that's what the cost model was intended to do.
  
    As discussed in D12882, this fix has a temporary unintended
    consequence for SimplifyCFG: it causes us to not speculate an fdiv.
    However, two wrongs make PR24818 right, and two wrongs make PR24343
    act right even though it's really still wrong.
  
    I intend to correct SimplifyCFG and add to CodeGenPrepare to account
    for this cost model change and preserve the righteousness for the bug
    report cases.
  
    https://llvm.org/bugs/show_bug.cgi?id=24818
    https://llvm.org/bugs/show_bug.cgi?id=24343
  
    Differential Revision: http://reviews.llvm.org/D12882
  
  This fixes the too-eager fdiv hoisting in pow(), which could lead to
  unexpected floating point exceptions.

Modified:
  projects/clang370-import/contrib/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h

Modified: projects/clang370-import/contrib/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h
==============================================================================
--- projects/clang370-import/contrib/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h	Thu Sep 24 21:04:48 2015	(r288194)
+++ projects/clang370-import/contrib/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h	Thu Sep 24 21:20:00 2015	(r288195)
@@ -60,6 +60,14 @@ public:
       // Otherwise, the default basic cost is used.
       return TTI::TCC_Basic;
 
+    case Instruction::FDiv:
+    case Instruction::FRem:
+    case Instruction::SDiv:
+    case Instruction::SRem:
+    case Instruction::UDiv:
+    case Instruction::URem:
+      return TTI::TCC_Expensive;
+
     case Instruction::IntToPtr: {
       // An inttoptr cast is free so long as the input is a legal integer type
       // which doesn't contain values outside the range of a pointer.


More information about the svn-src-projects mailing list