[clang] [llvm] Double run offloading (PR #107834)

2024-09-09 Thread Aleksei Romanov via cfe-commits

https://github.com/saveasguy created 
https://github.com/llvm/llvm-project/pull/107834

None

>From 5ca9c3f25663e78ea5205a901735b649756e9c1e Mon Sep 17 00:00:00 2001
From: Aleksei Romanov 
Date: Wed, 20 Sep 2023 01:10:02 +0300
Subject: [PATCH 1/5] [LVN] Add tests on LVN Pass (NFC)

---
 llvm/include/llvm/Transforms/Scalar/LVN.h | 15 ++
 llvm/lib/Passes/PassBuilder.cpp   |  1 +
 llvm/lib/Passes/PassRegistry.def  |  1 +
 llvm/lib/Transforms/Scalar/CMakeLists.txt |  1 +
 llvm/lib/Transforms/Scalar/LVN.cpp|  7 +++
 llvm/test/Transforms/LVN/basic_tests.ll   | 66 +++
 6 files changed, 91 insertions(+)
 create mode 100644 llvm/include/llvm/Transforms/Scalar/LVN.h
 create mode 100644 llvm/lib/Transforms/Scalar/LVN.cpp
 create mode 100644 llvm/test/Transforms/LVN/basic_tests.ll

diff --git a/llvm/include/llvm/Transforms/Scalar/LVN.h 
b/llvm/include/llvm/Transforms/Scalar/LVN.h
new file mode 100644
index 00..a99e81a5922c8a
--- /dev/null
+++ b/llvm/include/llvm/Transforms/Scalar/LVN.h
@@ -0,0 +1,15 @@
+#ifndef LLVM_TRANSFORMS_SCALAR_LVN_H
+#define LLVM_TRANSFORMS_SCALAR_LVN_H
+
+#include "llvm/IR/PassManager.h"
+
+namespace llvm {
+
+class LVNPass : public PassInfoMixin {
+public:
+  PreservedAnalyses run(Function &F, FunctionAnalysisManager &FAM);
+};
+
+} // end namespace llvm
+
+#endif // LLVM_TRANSFORMS_SCALAR_LVN_H
diff --git a/llvm/lib/Passes/PassBuilder.cpp b/llvm/lib/Passes/PassBuilder.cpp
index 5c7f26109930c9..dc99c9408a20cd 100644
--- a/llvm/lib/Passes/PassBuilder.cpp
+++ b/llvm/lib/Passes/PassBuilder.cpp
@@ -201,6 +201,7 @@
 #include "llvm/Transforms/Scalar/LowerGuardIntrinsic.h"
 #include "llvm/Transforms/Scalar/LowerMatrixIntrinsics.h"
 #include "llvm/Transforms/Scalar/LowerWidenableCondition.h"
+#include "llvm/Transforms/Scalar/LVN.h"
 #include "llvm/Transforms/Scalar/MakeGuardsExplicit.h"
 #include "llvm/Transforms/Scalar/MemCpyOptimizer.h"
 #include "llvm/Transforms/Scalar/MergeICmps.h"
diff --git a/llvm/lib/Passes/PassRegistry.def b/llvm/lib/Passes/PassRegistry.def
index b9aa015d02dd95..1729eb6120db72 100644
--- a/llvm/lib/Passes/PassRegistry.def
+++ b/llvm/lib/Passes/PassRegistry.def
@@ -358,6 +358,7 @@ FUNCTION_PASS("loop-simplify", LoopSimplifyPass())
 FUNCTION_PASS("loop-sink", LoopSinkPass())
 FUNCTION_PASS("lowerinvoke", LowerInvokePass())
 FUNCTION_PASS("lowerswitch", LowerSwitchPass())
+FUNCTION_PASS("lvn", LVNPass())
 FUNCTION_PASS("mem2reg", PromotePass())
 FUNCTION_PASS("memcpyopt", MemCpyOptPass())
 FUNCTION_PASS("mergeicmps", MergeICmpsPass())
diff --git a/llvm/lib/Transforms/Scalar/CMakeLists.txt 
b/llvm/lib/Transforms/Scalar/CMakeLists.txt
index eb008c15903a74..1f39809420e4c7 100644
--- a/llvm/lib/Transforms/Scalar/CMakeLists.txt
+++ b/llvm/lib/Transforms/Scalar/CMakeLists.txt
@@ -52,6 +52,7 @@ add_llvm_component_library(LLVMScalarOpts
   LowerGuardIntrinsic.cpp
   LowerMatrixIntrinsics.cpp
   LowerWidenableCondition.cpp
+  LVN.cpp
   MakeGuardsExplicit.cpp
   MemCpyOptimizer.cpp
   MergeICmps.cpp
diff --git a/llvm/lib/Transforms/Scalar/LVN.cpp 
b/llvm/lib/Transforms/Scalar/LVN.cpp
new file mode 100644
index 00..e5daccf0d78dd5
--- /dev/null
+++ b/llvm/lib/Transforms/Scalar/LVN.cpp
@@ -0,0 +1,7 @@
+#include "llvm/Transforms/Scalar/LVN.h"
+
+using namespace llvm;
+
+PreservedAnalyses LVNPass::run(Function &F, FunctionAnalysisManager &FAM) {
+  return PreservedAnalyses::all();
+}
diff --git a/llvm/test/Transforms/LVN/basic_tests.ll 
b/llvm/test/Transforms/LVN/basic_tests.ll
new file mode 100644
index 00..a3197101db694a
--- /dev/null
+++ b/llvm/test/Transforms/LVN/basic_tests.ll
@@ -0,0 +1,66 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 
UTC_ARGS: --version 3
+; RUN: opt -passes='lvn,dce' -S < %s | FileCheck %s
+
+define i32 @redundant_add(i32 %a, i32 %b, i32  %c) {
+; CHECK-LABEL: define i32 @redundant_add(
+; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) {
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:[[ADD:%.*]] = add i32 [[A]], [[B]]
+; CHECK-NEXT:[[MUL:%.*]] = mul i32 [[B]], [[C]]
+; CHECK-NEXT:[[ADD1:%.*]] = add i32 [[A]], [[B]]
+; CHECK-NEXT:[[MUL2:%.*]] = mul i32 [[ADD]], [[MUL]]
+; CHECK-NEXT:[[ADD2:%.*]] = add i32 [[MUL2]], [[ADD1]]
+; CHECK-NEXT:ret i32 [[ADD2]]
+;
+entry:
+  %add = add i32 %a, %b
+  %mul = mul i32 %b, %c
+  %add1 = add i32 %a, %b
+  %mul2 = mul i32 %add, %mul
+  %add2 = add i32 %mul2, %add1
+  ret i32 %add2
+}
+
+define i32 @redundant_mul(i32 noundef %a, i32 noundef %b, i32 noundef %c) {
+; CHECK-LABEL: define i32 @redundant_mul(
+; CHECK-SAME: i32 noundef [[A:%.*]], i32 noundef [[B:%.*]], i32 noundef 
[[C:%.*]]) {
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:[[ADD:%.*]] = add i32 [[A]], [[B]]
+; CHECK-NEXT:[[MUL:%.*]] = mul i32 [[B]], [[C]]
+; CHECK-NEXT:[[MUL1:%.*]] = mul i32 [[B]], [[C]]
+; CHECK-NEXT:[[MUL2:%.*]] = mul i32 [[ADD]], [[MUL]]
+; CHECK-NEXT:[[ADD1:%.*]] = add i32 [[MUL2]], [[MUL1]]
+; CHECK-

[clang] [llvm] Double run offloading (PR #107834)

2024-09-09 Thread Aleksei Romanov via cfe-commits

https://github.com/saveasguy closed 
https://github.com/llvm/llvm-project/pull/107834
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits