[PATCH] D102700: [Attributor] Change AAExecutionDomain to only accept intrinsics
Joseph Huber via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue May 18 09:58:01 PDT 2021
jhuber6 created this revision.
jhuber6 added a reviewer: jdoerfert.
Herald added subscribers: okura, kuter, uenoku, hiraditya.
Herald added a reviewer: uenoku.
Herald added a reviewer: homerdin.
jhuber6 requested review of this revision.
Herald added a reviewer: sstefan1.
Herald added subscribers: llvm-commits, bbn, sstefan1.
Herald added a reviewer: baziotis.
Herald added a project: LLVM.
The OpenMP runtime functions don't always provide unique thread ID's to
determine if a basic block is truly single-threaded. Change the implementation
to only check NVPTX intrinsics for now.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D102700
Files:
llvm/lib/Transforms/IPO/OpenMPOpt.cpp
llvm/test/Transforms/OpenMP/single_threaded_execution.ll
Index: llvm/test/Transforms/OpenMP/single_threaded_execution.ll
===================================================================
--- llvm/test/Transforms/OpenMP/single_threaded_execution.ll
+++ llvm/test/Transforms/OpenMP/single_threaded_execution.ll
@@ -2,12 +2,6 @@
; REQUIRES: asserts
; ModuleID = 'single_threaded_exeuction.c'
-%struct.ident_t = type { i32, i32, i32, i32, i8* }
-
- at .str = private unnamed_addr constant [4 x i8] c"%d\0A\00", align 1
- at 0 = private unnamed_addr constant [23 x i8] c";unknown;unknown;0;0;;\00", align 1
- at 1 = private unnamed_addr constant %struct.ident_t { i32 0, i32 2, i32 0, i32 0, i8* getelementptr inbounds ([23 x i8], [23 x i8]* @0, i32 0, i32 0) }, align 8
-
; CHECK: [openmp-opt] Basic block @bar entry is executed by a single thread.
; Function Attrs: noinline nounwind uwtable
define internal void @bar() {
@@ -21,7 +15,8 @@
; Function Attrs: noinline nounwind uwtable
define dso_local void @foo() {
entry:
- %call = call i32 @omp_get_thread_num()
+ %dummy = call i32 @omp_get_thread_num()
+ %call = call i32 @llvm.nvvm.read.ptx.sreg.tid.x()
%cmp = icmp eq i32 %call, 0
br i1 %cmp, label %if.then, label %if.end
@@ -35,6 +30,8 @@
declare dso_local i32 @omp_get_thread_num()
+declare i32 @llvm.nvvm.read.ptx.sreg.tid.x()
+
!llvm.module.flags = !{!0}
!llvm.ident = !{!1}
Index: llvm/lib/Transforms/IPO/OpenMPOpt.cpp
===================================================================
--- llvm/lib/Transforms/IPO/OpenMPOpt.cpp
+++ llvm/lib/Transforms/IPO/OpenMPOpt.cpp
@@ -30,6 +30,8 @@
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
#include "llvm/Transforms/Utils/CallGraphUpdater.h"
#include "llvm/Transforms/Utils/CodeExtractor.h"
+#include "llvm/IR/IntrinsicInst.h"
+#include "llvm/IR/IntrinsicsNVPTX.h"
using namespace llvm;
using namespace omp;
@@ -2329,7 +2331,6 @@
};
ChangeStatus AAExecutionDomainFunction::updateImpl(Attributor &A) {
- auto &OMPInfoCache = static_cast<OMPInformationCache &>(A.getInfoCache());
Function *F = getAnchorScope();
ReversePostOrderTraversal<Function *> RPOT(F);
auto NumSingleThreadedBBs = SingleThreadedBBs.size();
@@ -2365,17 +2366,9 @@
if (!C || !C->isZero())
return false;
- if (auto *CB = dyn_cast<CallBase>(Cmp->getOperand(0))) {
- RuntimeFunction ThreadNumRuntimeIDs[] = {OMPRTL_omp_get_thread_num,
- OMPRTL___kmpc_master,
- OMPRTL___kmpc_global_thread_num};
-
- for (const auto ThreadNumRuntimeID : ThreadNumRuntimeIDs) {
- auto &RFI = OMPInfoCache.RFIs[ThreadNumRuntimeID];
- if (CB->getCalledFunction() == RFI.Declaration)
- return true;
- }
- }
+ if (auto *II = dyn_cast<IntrinsicInst>(Cmp->getOperand(0)))
+ if (II->getIntrinsicID() == Intrinsic::nvvm_read_ptx_sreg_tid_x)
+ return true;
return false;
};
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D102700.346201.patch
Type: text/x-patch
Size: 2931 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210518/e3703a8f/attachment.bin>
More information about the llvm-commits
mailing list