[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