[llvm] r374920 - [NewGVN] Check that call has an access.
Alina Sbirlea via llvm-commits
llvm-commits at lists.llvm.org
Tue Oct 15 10:25:36 PDT 2019
Author: asbirlea
Date: Tue Oct 15 10:25:36 2019
New Revision: 374920
URL: http://llvm.org/viewvc/llvm-project?rev=374920&view=rev
Log:
[NewGVN] Check that call has an access.
Check that a call has an attached MemoryAccess before calling
getClobbering on the instruction.
If no access is attached, the instruction does not access memory.
Resolves PR43441.
Added:
llvm/trunk/test/Transforms/NewGVN/pr43441.ll
Modified:
llvm/trunk/lib/Transforms/Scalar/NewGVN.cpp
Modified: llvm/trunk/lib/Transforms/Scalar/NewGVN.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/NewGVN.cpp?rev=374920&r1=374919&r2=374920&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/NewGVN.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/NewGVN.cpp Tue Oct 15 10:25:36 2019
@@ -1639,8 +1639,11 @@ const Expression *NewGVN::performSymboli
if (AA->doesNotAccessMemory(CI)) {
return createCallExpression(CI, TOPClass->getMemoryLeader());
} else if (AA->onlyReadsMemory(CI)) {
- MemoryAccess *DefiningAccess = MSSAWalker->getClobberingMemoryAccess(CI);
- return createCallExpression(CI, DefiningAccess);
+ if (auto *MA = MSSA->getMemoryAccess(CI)) {
+ auto *DefiningAccess = MSSAWalker->getClobberingMemoryAccess(MA);
+ return createCallExpression(CI, DefiningAccess);
+ } else // MSSA determined that CI does not access memory.
+ return createCallExpression(CI, TOPClass->getMemoryLeader());
}
return nullptr;
}
Added: llvm/trunk/test/Transforms/NewGVN/pr43441.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/NewGVN/pr43441.ll?rev=374920&view=auto
==============================================================================
--- llvm/trunk/test/Transforms/NewGVN/pr43441.ll (added)
+++ llvm/trunk/test/Transforms/NewGVN/pr43441.ll Tue Oct 15 10:25:36 2019
@@ -0,0 +1,42 @@
+; RUN: opt -newgvn -S < %s | FileCheck %s
+
+target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+; CHECK-LABEL: @print_long_format()
+define dso_local void @print_long_format() #0 {
+entry:
+ switch i32 undef, label %sw.default [
+ i32 1, label %sw.bb
+ i32 0, label %sw.bb19
+ i32 2, label %sw.bb23
+ ]
+
+sw.bb: ; preds = %entry
+ unreachable
+
+sw.bb19: ; preds = %entry
+ br i1 undef, label %if.then37, label %if.end50
+
+sw.bb23: ; preds = %entry
+ unreachable
+
+sw.default: ; preds = %entry
+ unreachable
+
+if.then37: ; preds = %sw.bb19
+ unreachable
+
+if.end50: ; preds = %sw.bb19
+ %call180 = call i32 @timespec_cmp() #2
+ %cmp181 = icmp slt i32 %call180, 0
+ ret void
+}
+
+; Function Attrs: writeonly
+declare dso_local i32 @timespec_cmp() #1
+
+attributes #0 = { "use-soft-float"="false" }
+attributes #1 = { writeonly }
+attributes #2 = { nounwind readonly }
+
More information about the llvm-commits
mailing list