[Openmp-commits] [PATCH] D109986: [Attributor][OpenMP] Add assumption for non-call assembly instructions
Johannes Doerfert via Phabricator via Openmp-commits
openmp-commits at lists.llvm.org
Fri Sep 17 11:10:14 PDT 2021
jdoerfert updated this revision to Diff 373287.
jdoerfert added a comment.
Herald added a project: OpenMP.
Add new device runtime user
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D109986/new/
https://reviews.llvm.org/D109986
Files:
llvm/include/llvm/IR/Assumptions.h
llvm/lib/IR/Assumptions.cpp
llvm/lib/Transforms/IPO/AttributorAttributes.cpp
llvm/test/Transforms/Attributor/reachability.ll
openmp/libomptarget/DeviceRTL/include/Types.h
Index: openmp/libomptarget/DeviceRTL/include/Types.h
===================================================================
--- openmp/libomptarget/DeviceRTL/include/Types.h
+++ openmp/libomptarget/DeviceRTL/include/Types.h
@@ -12,6 +12,15 @@
#ifndef OMPTARGET_TYPES_H
#define OMPTARGET_TYPES_H
+// Tell the compiler that we do not have any "call-like" inline assembly in the
+// device rutime. That means we cannot have inline assembly which will call
+// another function but only inline assembly that performs some operation or
+// side-effect and then continues execution with something on the existing call
+// stack.
+//
+// TODO: Find a good place for this
+#pragma omp assumes ext_no_call_asm
+
/// Base type declarations for freestanding mode
///
///{
Index: llvm/test/Transforms/Attributor/reachability.ll
===================================================================
--- /dev/null
+++ llvm/test/Transforms/Attributor/reachability.ll
@@ -0,0 +1,20 @@
+
+define dso_local void @non_recursive_asm_fn() #0 {
+entry:
+ call void asm sideeffect "barrier.sync $0;", "r,~{memory},~{dirflag},~{fpsr},~{flags}"(i32 1)
+ ret void
+}
+
+define dso_local void @non_recursive_asm_cs() {
+entry:
+ call void asm sideeffect "barrier.sync $0;", "r,~{memory},~{dirflag},~{fpsr},~{flags}"(i32 1) #0
+ ret void
+}
+
+define dso_local void @recursive_asm() {
+entry:
+ call void asm sideeffect "barrier.sync $0;", "r,~{memory},~{dirflag},~{fpsr},~{flags}"(i32 1)
+ ret void
+}
+
+attributes #0 = { "llvm.assume"="ompx_no_call_asm" }
Index: llvm/lib/Transforms/IPO/AttributorAttributes.cpp
===================================================================
--- llvm/lib/Transforms/IPO/AttributorAttributes.cpp
+++ llvm/lib/Transforms/IPO/AttributorAttributes.cpp
@@ -30,6 +30,7 @@
#include "llvm/Analysis/TargetTransformInfo.h"
#include "llvm/Analysis/ValueTracking.h"
#include "llvm/IR/Argument.h"
+#include "llvm/IR/Assumptions.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/Instruction.h"
@@ -9696,7 +9697,9 @@
CallBase *CB = static_cast<CallBase *>(getCtxI());
if (CB->isInlineAsm()) {
- setHasUnknownCallee(false, Change);
+ if (!hasAssumption(*CB->getCaller(), "ompx_no_call_asm") &&
+ !hasAssumption(*CB, "ompx_no_call_asm"))
+ setHasUnknownCallee(false, Change);
return Change;
}
Index: llvm/lib/IR/Assumptions.cpp
===================================================================
--- llvm/lib/IR/Assumptions.cpp
+++ llvm/lib/IR/Assumptions.cpp
@@ -52,4 +52,5 @@
"omp_no_openmp_routines", // OpenMP 5.1
"omp_no_parallelism", // OpenMP 5.1
"ompx_spmd_amenable", // OpenMPOpt extension
+ "ompx_no_call_asm", // OpenMPOpt extension
});
Index: llvm/include/llvm/IR/Assumptions.h
===================================================================
--- llvm/include/llvm/IR/Assumptions.h
+++ llvm/include/llvm/IR/Assumptions.h
@@ -33,6 +33,10 @@
/// Helper that allows to insert a new assumption string in the known assumption
/// set by creating a (static) object.
struct KnownAssumptionString {
+ KnownAssumptionString(const char *AssumptionStr)
+ : AssumptionStr(AssumptionStr) {
+ KnownAssumptionStrings.insert(AssumptionStr);
+ }
KnownAssumptionString(StringRef AssumptionStr)
: AssumptionStr(AssumptionStr) {
KnownAssumptionStrings.insert(AssumptionStr);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D109986.373287.patch
Type: text/x-patch
Size: 3426 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/openmp-commits/attachments/20210917/9621c7b5/attachment.bin>
More information about the Openmp-commits
mailing list