From owner-svn-src-all@freebsd.org Sat Aug 27 11:37:24 2016 Return-Path: Delivered-To: svn-src-all@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 0DA68B771E3; Sat, 27 Aug 2016 11:37:24 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::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 CD94FA30; Sat, 27 Aug 2016 11:37:23 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u7RBbNEL020264; Sat, 27 Aug 2016 11:37:23 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id u7RBbMw0020262; Sat, 27 Aug 2016 11:37:22 GMT (envelope-from dim@FreeBSD.org) Message-Id: <201608271137.u7RBbMw0020262@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Sat, 27 Aug 2016 11:37:22 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org Subject: svn commit: r304897 - in vendor/llvm/dist: lib/Transforms/Scalar test/Transforms/SCCP X-SVN-Group: vendor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 27 Aug 2016 11:37:24 -0000 Author: dim Date: Sat Aug 27 11:37:22 2016 New Revision: 304897 URL: https://svnweb.freebsd.org/changeset/base/304897 Log: Vendor import of llvm release_39 branch r279689: https://llvm.org/svn/llvm-project/llvm/branches/release_39@279689 Modified: vendor/llvm/dist/lib/Transforms/Scalar/SCCP.cpp vendor/llvm/dist/test/Transforms/SCCP/calltest.ll Modified: vendor/llvm/dist/lib/Transforms/Scalar/SCCP.cpp ============================================================================== --- vendor/llvm/dist/lib/Transforms/Scalar/SCCP.cpp Sat Aug 27 11:07:57 2016 (r304896) +++ vendor/llvm/dist/lib/Transforms/Scalar/SCCP.cpp Sat Aug 27 11:37:22 2016 (r304897) @@ -1538,17 +1538,6 @@ static bool tryToReplaceWithConstant(SCC return true; } -static bool tryToReplaceInstWithConstant(SCCPSolver &Solver, Instruction *Inst, - bool shouldEraseFromParent) { - if (!tryToReplaceWithConstant(Solver, Inst)) - return false; - - // Delete the instruction. - if (shouldEraseFromParent) - Inst->eraseFromParent(); - return true; -} - // runSCCP() - Run the Sparse Conditional Constant Propagation algorithm, // and return true if the function was modified. // @@ -1597,8 +1586,9 @@ static bool runSCCP(Function &F, const D if (Inst->getType()->isVoidTy() || isa(Inst)) continue; - if (tryToReplaceInstWithConstant(Solver, Inst, - true /* shouldEraseFromParent */)) { + if (tryToReplaceWithConstant(Solver, Inst)) { + if (isInstructionTriviallyDead(Inst)) + Inst->eraseFromParent(); // Hey, we just changed something! MadeChanges = true; ++NumInstRemoved; @@ -1789,10 +1779,9 @@ static bool runIPSCCP(Module &M, const D Instruction *Inst = &*BI++; if (Inst->getType()->isVoidTy()) continue; - if (tryToReplaceInstWithConstant( - Solver, Inst, - !isa(Inst) && - !isa(Inst) /* shouldEraseFromParent */)) { + if (tryToReplaceWithConstant(Solver, Inst)) { + if (!isa(Inst) && !isa(Inst)) + Inst->eraseFromParent(); // Hey, we just changed something! MadeChanges = true; ++IPNumInstRemoved; Modified: vendor/llvm/dist/test/Transforms/SCCP/calltest.ll ============================================================================== --- vendor/llvm/dist/test/Transforms/SCCP/calltest.ll Sat Aug 27 11:07:57 2016 (r304896) +++ vendor/llvm/dist/test/Transforms/SCCP/calltest.ll Sat Aug 27 11:37:22 2016 (r304897) @@ -1,12 +1,16 @@ -; RUN: opt < %s -sccp -loop-deletion -simplifycfg -S | not grep br +; RUN: opt < %s -sccp -loop-deletion -simplifycfg -S | FileCheck %s +declare double @sqrt(double) readnone nounwind +%empty = type {} +declare %empty @has_side_effects() + +define double @test_0(i32 %param) { +; CHECK-LABEL: @test_0( +; CHECK-NOT: br +entry: ; No matter how hard you try, sqrt(1.0) is always 1.0. This allows the ; optimizer to delete this loop. -declare double @sqrt(double) - -define double @test(i32 %param) { -entry: br label %Loop Loop: ; preds = %Loop, %entry %I2 = phi i32 [ 0, %entry ], [ %I3, %Loop ] ; [#uses=1] @@ -19,3 +23,9 @@ Exit: ; preds = %Loop ret double %V } +define i32 @test_1() { +; CHECK-LABEL: @test_1( +; CHECK: call %empty @has_side_effects() + %1 = call %empty @has_side_effects() + ret i32 0 +}