llvm-project/llvm/test/Transforms/OpenMP/reduced_pointer_info_assertion.ll
Johannes Doerfert 22c898dbfd [OpenMP] Use Attributor to find underlying objects of stores
When we see a store in generic mode we need to decide if we should guard
it for SPMDzation. This patch changes the getUnderlyingObjects call to
the more optimistic getAssumedUnderlyingObjects call to identify more
thread local pointers.
2023-01-09 23:34:52 -08:00

66 lines
2.3 KiB
LLVM

; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --include-generated-funcs
; RUN: opt < %s -S -passes=openmp-opt | FileCheck %s --check-prefix=MODULE
; RUN: opt < %s -S -passes=openmp-opt-cgscc | FileCheck %s --check-prefix=CGSCC
target triple = "nvptx64-nvidia-cuda"
declare noalias ptr @alloc()
define internal i32 @nblist() {
%1 = call ptr @alloc()
call fastcc void @rec(ptr %1, i64 0)
ret i32 0
}
define fastcc void @rec(ptr %0, i64 %1) {
; CHECK-LABEL: define {{[^@]+}}@rec(
; CHECK-NEXT: [[TMP3:%.*]] = getelementptr i32, ptr [[TMP0:%.*]], i64 [[TMP1:%.*]]
; CHECK-NEXT: store i32 0, ptr [[TMP3]], align 4
; CHECK-NEXT: call fastcc void @rec(ptr [[TMP0]], i64 0)
; CHECK-NEXT: ret void
%3 = getelementptr i32, ptr %0, i64 %1
store i32 0, ptr %3, align 4
call fastcc void @rec(ptr %0, i64 0)
ret void
}
!llvm.module.flags = !{!0, !1}
!0 = !{i32 7, !"openmp", i32 50}
!1 = !{i32 7, !"openmp-device", i32 50}
; MODULE-LABEL: define {{[^@]+}}@nblist
; MODULE-SAME: () #[[ATTR0:[0-9]+]] {
; MODULE-NEXT: [[TMP1:%.*]] = call ptr @alloc()
; MODULE-NEXT: call fastcc void @rec.internalized(ptr [[TMP1]], i64 0)
; MODULE-NEXT: ret i32 0
;
;
; MODULE-LABEL: define {{[^@]+}}@rec.internalized
; MODULE-SAME: (ptr nocapture writeonly [[TMP0:%.*]], i64 [[TMP1:%.*]]) #[[ATTR1:[0-9]+]] {
; MODULE-NEXT: call fastcc void @rec.internalized(ptr nocapture writeonly [[TMP0]], i64 0) #[[ATTR2:[0-9]+]]
; MODULE-NEXT: ret void
;
;
; MODULE-LABEL: define {{[^@]+}}@rec
; MODULE-SAME: (ptr [[TMP0:%.*]], i64 [[TMP1:%.*]]) {
; MODULE-NEXT: [[TMP3:%.*]] = getelementptr i32, ptr [[TMP0]], i64 [[TMP1]]
; MODULE-NEXT: store i32 0, ptr [[TMP3]], align 4
; MODULE-NEXT: call fastcc void @rec(ptr [[TMP0]], i64 0)
; MODULE-NEXT: ret void
;
;
; CGSCC-LABEL: define {{[^@]+}}@nblist() {
; CGSCC-NEXT: [[TMP1:%.*]] = call ptr @alloc()
; CGSCC-NEXT: call fastcc void @rec(ptr [[TMP1]], i64 0)
; CGSCC-NEXT: ret i32 0
;
;
; CGSCC-LABEL: define {{[^@]+}}@rec
; CGSCC-SAME: (ptr [[TMP0:%.*]], i64 [[TMP1:%.*]]) {
; CGSCC-NEXT: [[TMP3:%.*]] = getelementptr i32, ptr [[TMP0]], i64 [[TMP1]]
; CGSCC-NEXT: store i32 0, ptr [[TMP3]], align 4
; CGSCC-NEXT: call fastcc void @rec(ptr [[TMP0]], i64 0)
; CGSCC-NEXT: ret void
;