Skip to content
Open
Show file tree
Hide file tree
Changes from 4 commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
938091d
[Flang][mlir] - Translation of delayed privatization for deferred tar…
bhandarkar-pranav Jun 17, 2025
f72152a
Add some comments and clean up some codoe
bhandarkar-pranav Aug 26, 2025
c859bbc
Fix CHECK stmts in test to account for constant folding done by the g…
bhandarkar-pranav Aug 26, 2025
697cc4f
Fix clang-format issues
bhandarkar-pranav Aug 27, 2025
bc107cd
Checkpoint commit, working with operaiton->walk
bhandarkar-pranav Sep 5, 2025
f7dacb3
Address more comments from tblah and meinersbur
bhandarkar-pranav Sep 8, 2025
f4a13ea
Handle boxchars
bhandarkar-pranav Sep 10, 2025
c8fad74
fix testcases
bhandarkar-pranav Sep 11, 2025
e74fa7d
Revert "Fix CHECK stmts in test to account for constant folding done …
bhandarkar-pranav Sep 11, 2025
343f7ec
Fix more testcases
bhandarkar-pranav Sep 11, 2025
41bb5b2
Reset some tests back to their old states
bhandarkar-pranav Sep 11, 2025
3264bfe
Undo empty line removal
bhandarkar-pranav Sep 11, 2025
b9fb8ce
Add back some CHECK statements in flang/test/Fir/target.fir and flang…
bhandarkar-pranav Sep 11, 2025
7032cae
use the init region to initialize the heap allocated private variable
bhandarkar-pranav Sep 17, 2025
269c575
use the copy region to copy the private variable into its heap alloca…
bhandarkar-pranav Sep 17, 2025
3109e4f
Fix for boxchars is working
bhandarkar-pranav Sep 18, 2025
d5b9c27
Adjust mlir/test/Dialect/LLVMIR/omp-offload-privatization-prepare.mli…
bhandarkar-pranav Sep 18, 2025
8bd4359
Address minor review comments
bhandarkar-pranav Sep 18, 2025
a393ff1
Handle the case where varPtr is a blockargument. - Take the varType f…
bhandarkar-pranav Sep 24, 2025
28ec66a
clean up the pass a little bit
bhandarkar-pranav Sep 24, 2025
d95799d
Do not include OpenMPOffloadPrivatizationPrepare.h in Pipelines.h. In…
bhandarkar-pranav Sep 24, 2025
0829719
Move PrepareForOMPOffloadPrivatizationPass from Transforms in LLVMIR …
bhandarkar-pranav Sep 25, 2025
01d1f69
Add a lit test for boxchars
bhandarkar-pranav Sep 25, 2025
d595572
Make createFuncForRegionAndCallIt take an arrayref as argumen
bhandarkar-pranav Sep 26, 2025
bf949fa
clean up
bhandarkar-pranav Sep 26, 2025
72a769f
make clang-format happy
bhandarkar-pranav Sep 26, 2025
061669f
Add some more comments and fix a typo
bhandarkar-pranav Sep 29, 2025
e036923
Checkpoint commit - dealloc working - need to fix lit testcase to tes…
bhandarkar-pranav Oct 4, 2025
5b78bab
fix lit testcase for dealloc region generation
bhandarkar-pranav Oct 5, 2025
b34b0e0
fix clang-format problems
bhandarkar-pranav Oct 6, 2025
4c5d8d8
Update test for differences between downstream and upstream
bhandarkar-pranav Oct 6, 2025
6288da9
Make changes requested by reviewers - Formatting changes requested by…
bhandarkar-pranav Oct 15, 2025
0a4ef58
Update test (again) for differences between downstream and upstream
bhandarkar-pranav Oct 15, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions flang/include/flang/Optimizer/Passes/Pipelines.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
#include "mlir/Conversion/SCFToControlFlow/SCFToControlFlow.h"
#include "mlir/Dialect/GPU/IR/GPUDialect.h"
#include "mlir/Dialect/LLVMIR/LLVMAttrs.h"
#include "mlir/Dialect/LLVMIR/Transforms/OpenMPOffloadPrivatizationPrepare.h"
#include "mlir/Pass/PassManager.h"
#include "mlir/Transforms/GreedyPatternRewriteDriver.h"
#include "mlir/Transforms/Passes.h"
Expand Down
7 changes: 7 additions & 0 deletions flang/lib/Optimizer/Passes/Pipelines.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -411,6 +411,13 @@ void createMLIRToLLVMPassPipeline(mlir::PassManager &pm,

// Add codegen pass pipeline.
fir::createDefaultFIRCodeGenPassPipeline(pm, config, inputFilename);

// Run a pass to prepare for translation of delayed privatization in the
// context of deferred target tasks.
addNestedPassConditionally<mlir::LLVM::LLVMFuncOp>(
pm, disableFirToLlvmIr, [&]() {
return mlir::LLVM::createPrepareForOMPOffloadPrivatizationPass();
});
}

} // namespace fir
4 changes: 2 additions & 2 deletions flang/test/Driver/tco-emit-final-mlir.fir
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
// CHECK: llvm.return
// CHECK-NOT: func.func

func.func @_QPfoo() {
func.func @_QPfoo() -> !fir.ref<i32> {
%1 = fir.alloca i32
return
return %1 : !fir.ref<i32>
}
5 changes: 2 additions & 3 deletions flang/test/Driver/tco-test-gen.fir
Original file line number Diff line number Diff line change
Expand Up @@ -42,11 +42,10 @@ func.func @_QPtest(%arg0: !fir.ref<i32> {fir.bindc_name = "num"}, %arg1: !fir.re
// CHECK-SAME: %[[ARG2:.*]]: !llvm.ptr {fir.bindc_name = "ub", llvm.nocapture},
// CHECK-SAME: %[[ARG3:.*]]: !llvm.ptr {fir.bindc_name = "step", llvm.nocapture}) {

// CMPLX: %[[VAL_3:.*]] = llvm.mlir.constant(0 : index) : i64
// CMPLX: %[[VAL_2:.*]] = llvm.mlir.constant(1 : index) : i64
// CMPLX: %[[VAL_0:.*]] = llvm.mlir.constant(1 : i64) : i64
// CMPLX: %[[VAL_1:.*]] = llvm.alloca %[[VAL_0]] x i32 {bindc_name = "i"} : (i64) -> !llvm.ptr
// CMPLX: %[[VAL_2:.*]] = llvm.mlir.constant(1 : index) : i64
// CMPLX: %[[VAL_3:.*]] = llvm.mlir.constant(0 : index) : i64
// CMPLX: %[[VAL_4:.*]] = llvm.mlir.constant(1 : i64) : i64

// SIMPLE: %[[VAL_3:.*]] = llvm.mlir.constant(0 : index) : i64
// SIMPLE: %[[VAL_2:.*]] = llvm.mlir.constant(1 : index) : i64
Expand Down
2 changes: 1 addition & 1 deletion flang/test/Fir/alloc-32.fir
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ func.func @allocmem_scalar_nonchar() -> !fir.heap<i32> {
// CHECK-LABEL: define ptr @allocmem_scalar_dynchar(
// CHECK-SAME: i32 %[[len:.*]])
// CHECK: %[[mul1:.*]] = sext i32 %[[len]] to i64
// CHECK: %[[mul2:.*]] = mul i64 1, %[[mul1]]
// CHECK: %[[mul2:.*]] = mul i64 %[[mul1]], 1
// CHECK: %[[cmp:.*]] = icmp sgt i64 %[[mul2]], 0
// CHECK: %[[sz:.*]] = select i1 %[[cmp]], i64 %[[mul2]], i64 1
// CHECK: %[[trunc:.*]] = trunc i64 %[[sz]] to i32
Expand Down
17 changes: 9 additions & 8 deletions flang/test/Fir/alloc.fir
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ func.func @alloca_scalar_dynchar_kind(%l : i32) -> !fir.ref<!fir.char<2,?>> {
// CHECK-LABEL: define ptr @allocmem_scalar_dynchar(
// CHECK-SAME: i32 %[[len:.*]])
// CHECK: %[[mul1:.*]] = sext i32 %[[len]] to i64
// CHECK: %[[mul2:.*]] = mul i64 1, %[[mul1]]
// CHECK: %[[mul2:.*]] = mul i64 %[[mul1]], 1
// CHECK: %[[cmp:.*]] = icmp sgt i64 %[[mul2]], 0
// CHECK: %[[size:.*]] = select i1 %[[cmp]], i64 %[[mul2]], i64 1
// CHECK: call ptr @malloc(i64 %[[size]])
Expand All @@ -98,7 +98,7 @@ func.func @allocmem_scalar_dynchar(%l : i32) -> !fir.heap<!fir.char<1,?>> {
// CHECK-LABEL: define ptr @allocmem_scalar_dynchar_kind(
// CHECK-SAME: i32 %[[len:.*]])
// CHECK: %[[mul1:.*]] = sext i32 %[[len]] to i64
// CHECK: %[[mul2:.*]] = mul i64 2, %[[mul1]]
// CHECK: %[[mul2:.*]] = mul i64 %[[mul1]], 2
// CHECK: %[[cmp:.*]] = icmp sgt i64 %[[mul2]], 0
// CHECK: %[[size:.*]] = select i1 %[[cmp]], i64 %[[mul2]], i64 1
// CHECK: call ptr @malloc(i64 %[[size]])
Expand Down Expand Up @@ -185,7 +185,7 @@ func.func @alloca_dynarray_of_nonchar2(%e: index) -> !fir.ref<!fir.array<?x?xi32

// CHECK-LABEL: define ptr @allocmem_dynarray_of_nonchar(
// CHECK-SAME: i64 %[[extent:.*]])
// CHECK: %[[prod1:.*]] = mul i64 12, %[[extent]]
// CHECK: %[[prod1:.*]] = mul i64 %[[extent]], 12
// CHECK: %[[cmp:.*]] = icmp sgt i64 %[[prod1]], 0
// CHECK: %[[size:.*]] = select i1 %[[cmp]], i64 %[[prod1]], i64 1
// CHECK: call ptr @malloc(i64 %[[size]])
Expand All @@ -196,7 +196,7 @@ func.func @allocmem_dynarray_of_nonchar(%e: index) -> !fir.heap<!fir.array<3x?xi

// CHECK-LABEL: define ptr @allocmem_dynarray_of_nonchar2(
// CHECK-SAME: i64 %[[extent:.*]])
// CHECK: %[[prod1:.*]] = mul i64 4, %[[extent]]
// CHECK: %[[prod1:.*]] = mul i64 %[[extent]], 4
// CHECK: %[[prod2:.*]] = mul i64 %[[prod1]], %[[extent]]
// CHECK: %[[cmp:.*]] = icmp sgt i64 %[[prod2]], 0
// CHECK: %[[size:.*]] = select i1 %[[cmp]], i64 %[[prod2]], i64 1
Expand Down Expand Up @@ -227,7 +227,7 @@ func.func @alloca_dynarray_of_char2(%e : index) -> !fir.ref<!fir.array<?x?x!fir.

// CHECK-LABEL: define ptr @allocmem_dynarray_of_char(
// CHECK-SAME: i64 %[[extent:.*]])
// CHECK: %[[prod1:.*]] = mul i64 60, %[[extent]]
// CHECK: %[[prod1:.*]] = mul i64 %[[extent]], 60
// CHECK: %[[cmp:.*]] = icmp sgt i64 %[[prod1]], 0
// CHECK: %[[size:.*]] = select i1 %[[cmp]], i64 %[[prod1]], i64 1
// CHECK: call ptr @malloc(i64 %[[size]])
Expand All @@ -238,7 +238,7 @@ func.func @allocmem_dynarray_of_char(%e : index) -> !fir.heap<!fir.array<3x?x!fi

// CHECK-LABEL: define ptr @allocmem_dynarray_of_char2(
// CHECK-SAME: i64 %[[extent:.*]])
// CHECK: %[[prod1:.*]] = mul i64 20, %[[extent]]
// CHECK: %[[prod1:.*]] = mul i64 %[[extent]], 20
// CHECK: %[[prod2:.*]] = mul i64 %[[prod1]], %[[extent]]
// CHECK: %[[cmp:.*]] = icmp sgt i64 %[[prod2]], 0
// CHECK: %[[size:.*]] = select i1 %[[cmp]], i64 %[[mul2]], i64 1
Expand Down Expand Up @@ -286,7 +286,7 @@ func.func @allocmem_dynarray_of_dynchar(%l: i32, %e : index) -> !fir.heap<!fir.a
// CHECK-LABEL: define ptr @allocmem_dynarray_of_dynchar2(
// CHECK-SAME: i32 %[[len:.*]], i64 %[[extent:.*]])
// CHECK: %[[a:.*]] = sext i32 %[[len]] to i64
// CHECK: %[[prod1:.*]] = mul i64 2, %[[a]]
// CHECK: %[[prod1:.*]] = mul i64 %[[a]], 2
// CHECK: %[[prod2:.*]] = mul i64 %[[prod1]], %[[extent]]
// CHECK: %[[prod3:.*]] = mul i64 %[[prod2]], %[[extent]]
// CHECK: %[[cmp:.*]] = icmp sgt i64 %[[prod3]], 0
Expand Down Expand Up @@ -366,12 +366,13 @@ func.func @allocmem_array_with_holes_dynchar(%arg0: index, %arg1: index) -> !fir
// CHECK: %[[VAL_0:.*]] = alloca { ptr, i64, i32, i8, i8, i8, i8, ptr, [1 x i64] }, i64 1
// CHECK: %[[VAL_3:.*]] = alloca { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]], ptr, [1 x i64] }, i64 1
// CHECK: %[[VAL_2:.*]] = alloca { ptr, i64, i32, i8, i8, i8, i8, ptr, [1 x i64] }, i64 1

func.func private @foo(%0: !fir.ref<!fir.class<none>>, %1: !fir.ref<!fir.class<!fir.array<?xnone>>>, %2: !fir.ref<!fir.box<none>>, %3: !fir.ref<!fir.box<!fir.array<?xnone>>>)
func.func @alloca_unlimited_polymorphic_box() {
%0 = fir.alloca !fir.class<none>
%1 = fir.alloca !fir.class<!fir.array<?xnone>>
%2 = fir.alloca !fir.box<none>
%3 = fir.alloca !fir.box<!fir.array<?xnone>>
fir.call @foo(%0, %1, %2, %3) : (!fir.ref<!fir.class<none>>, !fir.ref<!fir.class<!fir.array<?xnone>>>, !fir.ref<!fir.box<none>>, !fir.ref<!fir.box<!fir.array<?xnone>>>) -> ()
return
}
// Note: allocmem of fir.box are not possible (fir::HeapType::verify does not
Expand Down
4 changes: 2 additions & 2 deletions flang/test/Fir/arrexp.fir
Original file line number Diff line number Diff line change
Expand Up @@ -143,9 +143,9 @@ func.func @f6(%arg0: !fir.box<!fir.array<?xf32>>, %arg1: f32) {
%c9 = arith.constant 9 : index
%c10 = arith.constant 10 : index

// CHECK: %[[EXT_GEP:.*]] = getelementptr {{.*}} %[[A]], i32 0, i32 7, i64 0, i32 1
// CHECK: %[[EXT_GEP:.*]] = getelementptr {{.*}} %[[A]], i32 0, i32 7, i32 0, i32 1
// CHECK: %[[EXTENT:.*]] = load i64, ptr %[[EXT_GEP]]
// CHECK: %[[SIZE:.*]] = mul i64 4, %[[EXTENT]]
// CHECK: %[[SIZE:.*]] = mul i64 %[[EXTENT]], 4
// CHECK: %[[CMP:.*]] = icmp sgt i64 %[[SIZE]], 0
// CHECK: %[[SZ:.*]] = select i1 %[[CMP]], i64 %[[SIZE]], i64 1
// CHECK: %[[MALLOC:.*]] = call ptr @malloc(i64 %[[SZ]])
Expand Down
2 changes: 2 additions & 0 deletions flang/test/Fir/basic-program.fir
Original file line number Diff line number Diff line change
Expand Up @@ -158,4 +158,6 @@ func.func @_QQmain() {
// PASSES-NEXT: LowerNontemporalPass
// PASSES-NEXT: FIRToLLVMLowering
// PASSES-NEXT: ReconcileUnrealizedCasts
// PASSES-NEXT: 'llvm.func' Pipeline
// PASSES-NEXT: PrepareForOMPOffloadPrivatizationPass
// PASSES-NEXT: LLVMIRLoweringPass
6 changes: 3 additions & 3 deletions flang/test/Fir/box.fir
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ func.func @fa(%a : !fir.ref<!fir.array<100xf32>>) {
// CHECK-SAME: ptr {{[^%]*}}%[[res:.*]], ptr {{[^%]*}}%[[arg0:.*]], i64 %[[arg1:.*]])
func.func @b1(%arg0 : !fir.ref<!fir.char<1,?>>, %arg1 : index) -> !fir.box<!fir.char<1,?>> {
// CHECK: %[[alloca:.*]] = alloca { ptr, i64, i32, i8, i8, i8, i8 }
// CHECK: %[[size:.*]] = mul i64 1, %[[arg1]]
// CHECK: %[[size:.*]] = mul i64 %[[arg1]], 1
// CHECK: insertvalue {{.*}} undef, i64 %[[size]], 1
// CHECK: insertvalue {{.*}} i32 20240719, 2
// CHECK: insertvalue {{.*}} ptr %[[arg0]], 0
Expand Down Expand Up @@ -89,7 +89,7 @@ func.func @b2(%arg0 : !fir.ref<!fir.array<?x!fir.char<1,5>>>, %arg1 : index) ->
func.func @b3(%arg0 : !fir.ref<!fir.array<?x!fir.char<1,?>>>, %arg1 : index, %arg2 : index) -> !fir.box<!fir.array<?x!fir.char<1,?>>> {
%1 = fir.shape %arg2 : (index) -> !fir.shape<1>
// CHECK: %[[alloca:.*]] = alloca { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }
// CHECK: %[[size:.*]] = mul i64 1, %[[arg1]]
// CHECK: %[[size:.*]] = mul i64 %[[arg1]], 1
// CHECK: insertvalue {{.*}} i64 %[[size]], 1
// CHECK: insertvalue {{.*}} i32 20240719, 2
// CHECK: insertvalue {{.*}} i64 %[[arg2]], 7, 0, 1
Expand All @@ -108,7 +108,7 @@ func.func @b4(%arg0 : !fir.ref<!fir.array<7x!fir.char<1,?>>>, %arg1 : index) ->
%c_7 = arith.constant 7 : index
%1 = fir.shape %c_7 : (index) -> !fir.shape<1>
// CHECK: %[[alloca:.*]] = alloca { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }
// CHECK: %[[size:.*]] = mul i64 1, %[[arg1]]
// CHECK: %[[size:.*]] = mul i64 %[[arg1]], 1
// CHECK: insertvalue {{.*}} i64 %[[size]], 1
// CHECK: insertvalue {{.*}} i32 20240719, 2
// CHECK: insertvalue {{.*}} i64 7, 7, 0, 1
Expand Down
16 changes: 4 additions & 12 deletions flang/test/Fir/boxproc.fir
Original file line number Diff line number Diff line change
Expand Up @@ -82,12 +82,8 @@ func.func @_QPtest_proc_dummy_other(%arg0: !fir.boxproc<() -> ()>) {
// CHECK: store [1 x i8] c" ", ptr %[[VAL_18]], align 1
// CHECK: call void @llvm.init.trampoline(ptr %[[VAL_20]], ptr @_QFtest_proc_dummy_charPgen_message, ptr %[[VAL_2]])
// CHECK: %[[VAL_23:.*]] = call ptr @llvm.adjust.trampoline(ptr %[[VAL_20]])
// CHECK: %[[VAL_25:.*]] = insertvalue { ptr, i64 } undef, ptr %[[VAL_23]], 0
// CHECK: %[[VAL_26:.*]] = insertvalue { ptr, i64 } %[[VAL_25]], i64 10, 1
// CHECK: %[[VAL_27:.*]] = call ptr @llvm.stacksave.p0()
// CHECK: %[[VAL_28:.*]] = extractvalue { ptr, i64 } %[[VAL_26]], 0
// CHECK: %[[VAL_29:.*]] = extractvalue { ptr, i64 } %[[VAL_26]], 1
// CHECK: %[[VAL_30:.*]] = call { ptr, i64 } @_QPget_message(ptr %[[VAL_0]], i64 40, ptr %[[VAL_28]], i64 %[[VAL_29]])
// CHECK: %[[VAL_30:.*]] = call { ptr, i64 } @_QPget_message(ptr %[[VAL_0]], i64 40, ptr %[[VAL_23]], i64 10)
// CHECK: %[[VAL_32:.*]] = call i1 @_FortranAioOutputAscii(ptr %{{.*}}, ptr %[[VAL_0]], i64 40)
// CHECK: call void @llvm.stackrestore.p0(ptr %[[VAL_27]])

Expand Down Expand Up @@ -115,14 +111,10 @@ func.func @_QPtest_proc_dummy_other(%arg0: !fir.boxproc<() -> ()>) {
// CHECK-LABEL: define { ptr, i64 } @_QPget_message(ptr
// CHECK-SAME: %[[VAL_0:.*]], i64 %[[VAL_1:.*]], ptr %[[VAL_2:.*]], i64
// CHECK-SAME: %[[VAL_3:.*]])
// CHECK: %[[VAL_4:.*]] = insertvalue { ptr, i64 } undef, ptr %[[VAL_2]], 0
// CHECK: %[[VAL_5:.*]] = insertvalue { ptr, i64 } %[[VAL_4]], i64 %[[VAL_3]], 1
// CHECK: %[[VAL_7:.*]] = extractvalue { ptr, i64 } %[[VAL_5]], 0
// CHECK: %[[VAL_8:.*]] = extractvalue { ptr, i64 } %[[VAL_5]], 1
// CHECK: %[[VAL_9:.*]] = call ptr @llvm.stacksave.p0()
// CHECK: %[[VAL_10:.*]] = alloca i8, i64 %[[VAL_8]], align 1
// CHECK: %[[VAL_12:.*]] = call { ptr, i64 } %[[VAL_7]](ptr %[[VAL_10]], i64 %[[VAL_8]])
// CHECK: %[[VAL_13:.*]] = add i64 %[[VAL_8]], 12
// CHECK: %[[VAL_10:.*]] = alloca i8, i64 %[[VAL_3]], align 1
// CHECK: %[[VAL_12:.*]] = call { ptr, i64 } %[[VAL_2]](ptr %[[VAL_10]], i64 %[[VAL_3]])
// CHECK: %[[VAL_13:.*]] = add i64 %[[VAL_3]], 12
// CHECK: %[[VAL_14:.*]] = alloca i8, i64 %[[VAL_13]], align 1
// CHECK: call void @llvm.memmove.p0.p0.i64(ptr %[[VAL_14]], ptr {{.*}}, i64 12, i1 false)
// CHECK: %[[VAL_18:.*]] = phi i64
Expand Down
6 changes: 3 additions & 3 deletions flang/test/Fir/embox.fir
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ func.func @_QPtest_callee(%arg0: !fir.box<!fir.array<?xi32>>) {
func.func @_QPtest_slice() {
// CHECK: %[[a1:.*]] = alloca { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, align 8
// CHECK: %[[a2:.*]] = alloca [20 x i32], i64 1, align 4
// CHECK: %[[a3:.*]] = getelementptr [20 x i32], ptr %[[a2]], i64 0, i64 0
// CHECK: %[[a3:.*]] = getelementptr [20 x i32], ptr %[[a2]], i32 0, i64 0
// CHECK: %[[a4:.*]] = insertvalue { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }
// CHECK: { ptr undef, i64 4, i32 20240719, i8 1, i8 9, i8 0, i8 0, [1 x [3 x i64]]
// CHECK: [i64 1, i64 5, i64 8]] }, ptr %[[a3]], 0
Expand All @@ -38,7 +38,7 @@ func.func @_QPtest_dt_callee(%arg0: !fir.box<!fir.array<?xi32>>) {
func.func @_QPtest_dt_slice() {
// CHECK: %[[a1:.*]] = alloca { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }, align 8
// CHECK: %[[a3:.*]] = alloca [20 x %_QFtest_dt_sliceTt], i64 1, align 8
// CHECK: %[[a4:.*]] = getelementptr [20 x %_QFtest_dt_sliceTt], ptr %[[a3]], i64 0, i64 0, i32 0
// CHECK: %[[a4:.*]] = getelementptr [20 x %_QFtest_dt_sliceTt], ptr %[[a3]], i32 0, i64 0, i32 0
// CHECK: %[[a5:.*]] = insertvalue { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]] }
// CHECK-SAME: { ptr undef, i64 4, i32 20240719, i8 1, i8 9, i8 0, i8 0, [1 x [3 x i64]]
// CHECK-SAME: [i64 1, i64 5, i64 16
Expand Down Expand Up @@ -73,7 +73,7 @@ func.func @emboxSubstring(%arg0: !fir.ref<!fir.array<2x3x!fir.char<1,4>>>) {
%0 = fir.shape %c2, %c3 : (index, index) -> !fir.shape<2>
%1 = fir.slice %c1, %c2, %c1, %c1, %c3, %c1 substr %c1_i64, %c2_i64 : (index, index, index, index, index, index, i64, i64) -> !fir.slice<2>
%2 = fir.embox %arg0(%0) [%1] : (!fir.ref<!fir.array<2x3x!fir.char<1,4>>>, !fir.shape<2>, !fir.slice<2>) -> !fir.box<!fir.array<?x?x!fir.char<1,?>>>
// CHECK: %[[addr:.*]] = getelementptr [3 x [2 x [4 x i8]]], ptr %[[arg0]], i64 0, i64 0, i64 0, i64 1
// CHECK: %[[addr:.*]] = getelementptr [3 x [2 x [4 x i8]]], ptr %[[arg0]], i32 0, i64 0, i64 0, i32 1
// CHECK: insertvalue {[[descriptorType:.*]]} { ptr undef, i64 2, i32 20240719, i8 2, i8 40, i8 0, i8 0
// CHECK-SAME: [2 x [3 x i64]] [{{\[}}3 x i64] [i64 1, i64 2, i64 4], [3 x i64] [i64 1, i64 3, i64 8]] }
// CHECK-SAME: ptr %[[addr]], 0
Expand Down
6 changes: 3 additions & 3 deletions flang/test/Fir/omp-reduction-embox-codegen.fir
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,14 @@ omp.declare_reduction @test_reduction : !fir.ref<!fir.box<i32>> init {
omp.yield(%0 : !fir.ref<!fir.box<i32>>)
}

func.func @_QQmain() attributes {fir.bindc_name = "reduce"} {
func.func @_QQmain() -> !fir.ref<!fir.box<i32>> attributes {fir.bindc_name = "reduce"} {
%4 = fir.alloca !fir.box<i32>
omp.parallel reduction(byref @test_reduction %4 -> %arg0 : !fir.ref<!fir.box<i32>>) {
omp.terminator
}
return
return %4: !fir.ref<!fir.box<i32>>
}

// basically we are testing that there isn't a crash
// CHECK-LABEL: define void @_QQmain
// CHECK-LABEL: define ptr @_QQmain
// CHECK-NEXT: alloca { ptr, i64, i32, i8, i8, i8, i8 }, i64 1, align 8
14 changes: 7 additions & 7 deletions flang/test/Fir/omp_target_allocmem_freemem.fir
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ func.func @omp_target_allocmem_scalar_char_kind() -> () {
// CHECK-LABEL: define void @omp_target_allocmem_scalar_dynchar(
// CHECK-SAME: i32 [[TMP0:%.*]]) {
// CHECK-NEXT: [[TMP2:%.*]] = sext i32 [[TMP0]] to i64
// CHECK-NEXT: [[TMP3:%.*]] = mul i64 1, [[TMP2]]
// CHECK-NEXT: [[TMP3:%.*]] = mul i64 [[TMP2]], 1
// CHECK-NEXT: [[TMP4:%.*]] = mul i64 1, [[TMP3]]
// CHECK-NEXT: [[TMP5:%.*]] = call ptr @omp_target_alloc(i64 [[TMP4]], i32 0)
// CHECK-NEXT: [[TMP6:%.*]] = ptrtoint ptr [[TMP5]] to i64
Expand All @@ -80,7 +80,7 @@ func.func @omp_target_allocmem_scalar_dynchar(%l : i32) -> () {
// CHECK-LABEL: define void @omp_target_allocmem_scalar_dynchar_kind(
// CHECK-SAME: i32 [[TMP0:%.*]]) {
// CHECK-NEXT: [[TMP2:%.*]] = sext i32 [[TMP0]] to i64
// CHECK-NEXT: [[TMP3:%.*]] = mul i64 2, [[TMP2]]
// CHECK-NEXT: [[TMP3:%.*]] = mul i64 [[TMP2]], 2
// CHECK-NEXT: [[TMP4:%.*]] = mul i64 1, [[TMP3]]
// CHECK-NEXT: [[TMP5:%.*]] = call ptr @omp_target_alloc(i64 [[TMP4]], i32 0)
// CHECK-NEXT: [[TMP6:%.*]] = ptrtoint ptr [[TMP5]] to i64
Expand Down Expand Up @@ -141,7 +141,7 @@ func.func @omp_target_allocmem_array_of_dynchar(%l: i32) -> () {

// CHECK-LABEL: define void @omp_target_allocmem_dynarray_of_nonchar(
// CHECK-SAME: i64 [[TMP0:%.*]]) {
// CHECK-NEXT: [[TMP2:%.*]] = mul i64 12, [[TMP0]]
// CHECK-NEXT: [[TMP2:%.*]] = mul i64 [[TMP0]], 12
// CHECK-NEXT: [[TMP3:%.*]] = mul i64 1, [[TMP2]]
// CHECK-NEXT: [[TMP4:%.*]] = call ptr @omp_target_alloc(i64 [[TMP3]], i32 0)
// CHECK-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[TMP4]] to i64
Expand All @@ -157,7 +157,7 @@ func.func @omp_target_allocmem_dynarray_of_nonchar(%e: index) -> () {

// CHECK-LABEL: define void @omp_target_allocmem_dynarray_of_nonchar2(
// CHECK-SAME: i64 [[TMP0:%.*]]) {
// CHECK-NEXT: [[TMP2:%.*]] = mul i64 4, [[TMP0]]
// CHECK-NEXT: [[TMP2:%.*]] = mul i64 [[TMP0]], 4
// CHECK-NEXT: [[TMP3:%.*]] = mul i64 [[TMP2]], [[TMP0]]
// CHECK-NEXT: [[TMP4:%.*]] = mul i64 1, [[TMP3]]
// CHECK-NEXT: [[TMP5:%.*]] = call ptr @omp_target_alloc(i64 [[TMP4]], i32 0)
Expand All @@ -174,7 +174,7 @@ func.func @omp_target_allocmem_dynarray_of_nonchar2(%e: index) -> () {

// CHECK-LABEL: define void @omp_target_allocmem_dynarray_of_char(
// CHECK-SAME: i64 [[TMP0:%.*]]) {
// CHECK-NEXT: [[TMP2:%.*]] = mul i64 60, [[TMP0]]
// CHECK-NEXT: [[TMP2:%.*]] = mul i64 [[TMP0]], 60
// CHECK-NEXT: [[TMP3:%.*]] = mul i64 1, [[TMP2]]
// CHECK-NEXT: [[TMP4:%.*]] = call ptr @omp_target_alloc(i64 [[TMP3]], i32 0)
// CHECK-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[TMP4]] to i64
Expand All @@ -191,7 +191,7 @@ func.func @omp_target_allocmem_dynarray_of_char(%e : index) -> () {

// CHECK-LABEL: define void @omp_target_allocmem_dynarray_of_char2(
// CHECK-SAME: i64 [[TMP0:%.*]]) {
// CHECK-NEXT: [[TMP2:%.*]] = mul i64 20, [[TMP0]]
// CHECK-NEXT: [[TMP2:%.*]] = mul i64 [[TMP0]], 20
// CHECK-NEXT: [[TMP3:%.*]] = mul i64 [[TMP2]], [[TMP0]]
// CHECK-NEXT: [[TMP4:%.*]] = mul i64 1, [[TMP3]]
// CHECK-NEXT: [[TMP5:%.*]] = call ptr @omp_target_alloc(i64 [[TMP4]], i32 0)
Expand Down Expand Up @@ -227,7 +227,7 @@ func.func @omp_target_allocmem_dynarray_of_dynchar(%l: i32, %e : index) -> () {
// CHECK-LABEL: define void @omp_target_allocmem_dynarray_of_dynchar2(
// CHECK-SAME: i32 [[TMP0:%.*]], i64 [[TMP1:%.*]]) {
// CHECK-NEXT: [[TMP3:%.*]] = sext i32 [[TMP0]] to i64
// CHECK-NEXT: [[TMP4:%.*]] = mul i64 2, [[TMP3]]
// CHECK-NEXT: [[TMP4:%.*]] = mul i64 [[TMP3]], 2
// CHECK-NEXT: [[TMP5:%.*]] = mul i64 [[TMP4]], [[TMP1]]
// CHECK-NEXT: [[TMP6:%.*]] = mul i64 [[TMP5]], [[TMP1]]
// CHECK-NEXT: [[TMP7:%.*]] = mul i64 1, [[TMP6]]
Expand Down
3 changes: 1 addition & 2 deletions flang/test/Fir/optional.fir
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,7 @@ func.func @bar2() -> i1 {

// CHECK-LABEL: @foo3
func.func @foo3(%arg0: !fir.boxchar<1>) -> i1 {
// CHECK: %[[extract:.*]] = extractvalue { ptr, i64 } %{{.*}}, 0
// CHECK: %[[ptr:.*]] = ptrtoint ptr %[[extract]] to i64
// CHECK: %[[ptr:.*]] = ptrtoint ptr %0 to i64
// CHECK: icmp ne i64 %[[ptr]], 0
%0 = fir.is_present %arg0 : (!fir.boxchar<1>) -> i1
return %0 : i1
Expand Down
6 changes: 3 additions & 3 deletions flang/test/Fir/pdt.fir
Original file line number Diff line number Diff line change
Expand Up @@ -96,13 +96,13 @@ func.func @_QTt1P.f2.offset(%0 : i32, %1 : i32) -> i32 {

func.func private @bar(!fir.ref<!fir.char<1,?>>)

// CHECK-LABEL: define void @_QPfoo(i32 %0, i32 %1)
func.func @_QPfoo(%arg0 : i32, %arg1 : i32) {
// CHECK-LABEL: define ptr @_QPfoo(i32 %0, i32 %1)
func.func @_QPfoo(%arg0 : i32, %arg1 : i32) -> !fir.ref<!fir.type<_QTt1>> {
// CHECK: %[[size:.*]] = call i64 @_QTt1P.mem.size(i32 %0, i32 %1)
// CHECK: %[[alloc:.*]] = alloca i8, i64 %[[size]]
%0 = fir.alloca !fir.type<_QTt1(p1:i32,p2:i32){f1:!fir.char<1,?>,f2:!fir.char<1,?>}>(%arg0, %arg1 : i32, i32)
//%2 = fir.coordinate_of %0, f2 : (!fir.ref<!fir.type<_QTt1>>) -> !fir.ref<!fir.char<1,?>>
%2 = fir.zero_bits !fir.ref<!fir.char<1,?>>
fir.call @bar(%2) : (!fir.ref<!fir.char<1,?>>) -> ()
return
return %0 : !fir.ref<!fir.type<_QTt1>>
}
Loading
Loading