From owner-svn-src-projects@freebsd.org Fri Sep 25 18:21:49 2015 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 03A90A08729 for ; Fri, 25 Sep 2015 18:21:49 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id E8CFB1062; Fri, 25 Sep 2015 18:21:48 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t8PILm52075438; Fri, 25 Sep 2015 18:21:48 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t8PILm3c075437; Fri, 25 Sep 2015 18:21:48 GMT (envelope-from dim@FreeBSD.org) Message-Id: <201509251821.t8PILm3c075437@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Fri, 25 Sep 2015 18:21:48 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r288222 - projects/clang370-import/contrib/llvm/patches X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 25 Sep 2015 18:21:49 -0000 Author: dim Date: Fri Sep 25 18:21:48 2015 New Revision: 288222 URL: https://svnweb.freebsd.org/changeset/base/288222 Log: Add llvm patch corresponding to r288195. Added: projects/clang370-import/contrib/llvm/patches/patch-06-llvm-r248439-fdiv-hoisting.diff Added: projects/clang370-import/contrib/llvm/patches/patch-06-llvm-r248439-fdiv-hoisting.diff ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/clang370-import/contrib/llvm/patches/patch-06-llvm-r248439-fdiv-hoisting.diff Fri Sep 25 18:21:48 2015 (r288222) @@ -0,0 +1,83 @@ +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. + +Introduced here: http://svnweb.freebsd.org/changeset/base/288195 + +Index: include/llvm/Analysis/TargetTransformInfoImpl.h +=================================================================== +--- include/llvm/Analysis/TargetTransformInfoImpl.h ++++ include/llvm/Analysis/TargetTransformInfoImpl.h +@@ -60,6 +60,14 @@ class TargetTransformInfoImplBase { + // 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. +Index: test/Transforms/SimplifyCFG/speculate-math.ll +=================================================================== +--- test/Transforms/SimplifyCFG/speculate-math.ll ++++ test/Transforms/SimplifyCFG/speculate-math.ll +@@ -7,6 +7,33 @@ declare float @llvm.fabs.f32(float) nounwind reado + declare float @llvm.minnum.f32(float, float) nounwind readonly + declare float @llvm.maxnum.f32(float, float) nounwind readonly + ++; FIXME: This is intended to be a temporary test. As discussed in ++; D12882, we actually do want to speculate even expensive operations ++; in SimplifyCFG because it can expose more optimizations for other ++; passes. Therefore, we either need to adjust SimplifyCFG's ++; calculations that use the TTI cost model or use a different cost ++; model for deciding which ops should be speculated in SimplifyCFG. ++; We should also be using the TTI cost model later - for example in ++; CodeGenPrepare - to potentially undo this speculation. ++ ++; Do not speculate fdiv by default because it is generally expensive. ++ ++; CHECK-LABEL: @fdiv_test( ++; CHECK-NOT: select ++define double @fdiv_test(double %a, double %b) { ++entry: ++ %cmp = fcmp ogt double %a, 0.0 ++ br i1 %cmp, label %cond.true, label %cond.end ++ ++cond.true: ++ %div = fdiv double %b, %a ++ br label %cond.end ++ ++cond.end: ++ %cond = phi double [ %div, %cond.true ], [ 0.0, %entry ] ++ ret double %cond ++} ++ + ; CHECK-LABEL: @sqrt_test( + ; CHECK: select + define void @sqrt_test(float addrspace(1)* noalias nocapture %out, float %a) nounwind {