Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Replace llvm.memcpy et al's i1 isVolatile with i8 VolFlags #65748

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 18 commits into
base: main
Choose a base branch
Loading
from
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
e4bd6bc
[llvm] Modify memcpy intrinsics to take dst/src volatile flags
urnathan Aug 11, 2023
bcfed3e
[mlir] Updates for memcpy/memmove intrinsic change
urnathan Aug 23, 2023
516e42d
[flang] Updates for memcpy/memmove intrinsics change
urnathan Aug 24, 2023
62b8423
[polly] Test fixes for memcpy/memmove intrinsics change
urnathan Sep 9, 2023
e392ca5
[llvm] Update manual memcpy/move intrinsic testcases
urnathan Aug 14, 2023
1467ae3
[clang] Update manual memcpy/move intrinsic testcases
urnathan Sep 6, 2023
51cbac0
[llvm] Update UTC tests for memcpy/memmove intrinsic change
urnathan Aug 15, 2023
f150676
[clang] Update UTC tests for memcpy/memmove intrinsic change
urnathan Aug 28, 2023
7ff0662
[llvm] Adjust IR Builder for memcpy/memmove volatile change
urnathan Aug 12, 2023
1f8bbc0
[clang] Update CodeGen for memcpy/memmove volatile changes
urnathan Aug 29, 2023
3310462
[llvm] MemTransferInst change for memcpy/memmove volatility
urnathan Aug 29, 2023
8c23741
[llvm] CodeGen & Transform updates for memcpy/memmove volatility
urnathan Aug 29, 2023
53d7aa4
[llvm] Target-specific changes for memcpy/memove volatility
urnathan Aug 30, 2023
7a2d4f0
Volatile structure memcpy test case
urnathan Aug 23, 2023
513ca77
[llvm] Remaining memcpy/memmove volatile argument cleanup
urnathan Aug 22, 2023
c3ebe67
[llvm] Deprecate Volatility compatibility API
urnathan Sep 7, 2023
9895588
[aarch64] Update memcpy et al emission for separate volatilities
urnathan Aug 29, 2023
c27f074
Add Builder API to MemTransferVolatility
urnathan Sep 14, 2023
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
Prev Previous commit
Next Next commit
[flang] Updates for memcpy/memmove intrinsics change
Fortran has no concept of 'volatile', but this updates Flang's IR to
represent memcpy/memmove's new VolFlags argument. We only pass i8:0
(replacing the previous i1:false).
  • Loading branch information
urnathan committed Sep 10, 2023
commit 516e42d5d22a3fc3f230e26f73d7023fdbd22fe9
2 changes: 2 additions & 0 deletions 2 flang/lib/Frontend/FrontendActions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1136,6 +1136,8 @@ void CodeGenAction::executeAction() {
if (!llvmModule)
generateLLVMIR();

assert(llvmModule && "Failed to create LLVM module");

// Set the triple based on the targetmachine (this comes compiler invocation
// and the command-line target option if specified, or the default if not
// given on the command-line).
Expand Down
8 changes: 6 additions & 2 deletions 8 flang/lib/Lower/ConvertExpr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6242,9 +6242,11 @@ class ArrayExprLowering {
builder.create<mlir::arith::MulIOp>(loc, arrSz, eleSz);
auto buff = builder.createConvert(loc, fir::HeapType::get(resTy), mem);
mlir::Value buffi = computeCoordinate(buff, off);
mlir::Value notVolatile =
builder.createIntegerConstant(loc, builder.getI8Type(), 0);
llvm::SmallVector<mlir::Value> args = fir::runtime::createArguments(
builder, loc, memcpyType(), buffi, v.getAddr(), byteSz,
/*volatile=*/builder.createBool(loc, false));
/*volatile=*/notVolatile);
createCallMemcpy(args);

// Save the incremented buffer position.
Expand Down Expand Up @@ -6293,9 +6295,11 @@ class ArrayExprLowering {
mlir::Value buff =
builder.createConvert(loc, fir::HeapType::get(resTy), mem);
mlir::Value buffi = computeCoordinate(buff, off);
mlir::Value notVolatile =
builder.createIntegerConstant(loc, builder.getI8Type(), 0);
llvm::SmallVector<mlir::Value> args = fir::runtime::createArguments(
builder, loc, memcpyType(), buffi, v.getAddr(), eleSz,
/*volatile=*/builder.createBool(loc, false));
/*volatile=*/notVolatile);
createCallMemcpy(args);

builder.create<fir::StoreOp>(loc, plusOne, buffPos);
Expand Down
3 changes: 2 additions & 1 deletion 3 flang/lib/Optimizer/Builder/Character.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -331,7 +331,8 @@ void fir::factory::CharacterExprHelper::createCopy(
auto castCount = builder.createConvert(loc, i64Ty, count);
auto totalBytes =
builder.create<mlir::arith::MulIOp>(loc, kindBytes, castCount);
auto notVolatile = builder.createBool(loc, false);
auto notVolatile =
builder.createIntegerConstant(loc, builder.getI8Type(), 0);
auto memmv = getLlvmMemmove(builder);
auto argTys = memmv.getFunctionType().getInputs();
auto toPtr = builder.createConvert(loc, argTys[0], toBuff);
Expand Down
4 changes: 2 additions & 2 deletions 4 flang/lib/Optimizer/Builder/LowLevelIntrinsics.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
mlir::func::FuncOp fir::factory::getLlvmMemcpy(fir::FirOpBuilder &builder) {
auto ptrTy = builder.getRefType(builder.getIntegerType(8));
llvm::SmallVector<mlir::Type> args = {ptrTy, ptrTy, builder.getI64Type(),
builder.getI1Type()};
builder.getI8Type()};
auto memcpyTy =
mlir::FunctionType::get(builder.getContext(), args, std::nullopt);
return builder.addNamedFunction(builder.getUnknownLoc(),
Expand All @@ -34,7 +34,7 @@ mlir::func::FuncOp fir::factory::getLlvmMemcpy(fir::FirOpBuilder &builder) {
mlir::func::FuncOp fir::factory::getLlvmMemmove(fir::FirOpBuilder &builder) {
auto ptrTy = builder.getRefType(builder.getIntegerType(8));
llvm::SmallVector<mlir::Type> args = {ptrTy, ptrTy, builder.getI64Type(),
builder.getI1Type()};
builder.getI8Type()};
auto memmoveTy =
mlir::FunctionType::get(builder.getContext(), args, std::nullopt);
return builder.addNamedFunction(builder.getUnknownLoc(),
Expand Down
2 changes: 1 addition & 1 deletion 2 flang/test/Driver/compiler_options.f90
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ program main
use ISO_FORTRAN_ENV, only: compiler_options
implicit none
character (len = :), allocatable :: v
! CHECK: call void @llvm.memmove.p0.p0.i64(ptr %{{[0-9]+}}, ptr [[OPTSVAR]], i64 [[OPTSLEN]], i1 false)
! CHECK: call void @llvm.memmove.p0.p0.i64(ptr %{{[0-9]+}}, ptr [[OPTSVAR]], i64 [[OPTSLEN]], i8 0)
v = compiler_options()
print *, v
deallocate(v)
Expand Down
19 changes: 11 additions & 8 deletions 19 flang/test/Fir/boxproc.fir
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ func.func @_QPtest_proc_dummy_other(%arg0: !fir.boxproc<() -> ()>) {
// CHECK: %[[VAL_6:.*]] = extractvalue { ptr, i64 } %[[VAL_4]], 1
// CHECK: %[[VAL_8:.*]] = icmp sgt i64 %[[VAL_6]], 10
// CHECK: %[[VAL_9:.*]] = select i1 %[[VAL_8]], i64 10, i64 %[[VAL_6]]
// CHECK: call void @llvm.memmove.p0.p0.i64(ptr %[[VAL_0]], ptr %[[VAL_5]], i64 %[[VAL_9]], i1 false)
// CHECK: call void @llvm.memmove.p0.p0.i64(ptr %[[VAL_0]], ptr %[[VAL_5]], i64 %[[VAL_9]], i8 0)
// CHECK: %[[VAL_10:.*]] = sub i64 10, %[[VAL_9]]
// CHECK: br label %[[VAL_11:.*]]
// CHECK: %[[VAL_14:.*]] = phi i64
Expand All @@ -120,7 +120,7 @@ func.func @_QPtest_proc_dummy_other(%arg0: !fir.boxproc<() -> ()>) {
// CHECK: %[[VAL_12:.*]] = call { ptr, i64 } %[[VAL_7]](ptr %[[VAL_10]], i64 %[[VAL_8]])
// CHECK: %[[VAL_13:.*]] = add i64 %[[VAL_8]], 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: call void @llvm.memmove.p0.p0.i64(ptr %[[VAL_14]], ptr {{.*}}, i64 12, i8 0)
// CHECK: %[[VAL_18:.*]] = phi i64
// CHECK: %[[VAL_20:.*]] = phi i64
// CHECK: %[[VAL_22:.*]] = icmp sgt i64 %[[VAL_20]], 0
Expand All @@ -131,7 +131,7 @@ func.func @_QPtest_proc_dummy_other(%arg0: !fir.boxproc<() -> ()>) {
// CHECK: store [1 x i8] %[[VAL_27]], ptr %[[VAL_29]], align 1
// CHECK: %[[VAL_30:.*]] = icmp sgt i64 %[[VAL_13]], 40
// CHECK: %[[VAL_31:.*]] = select i1 %[[VAL_30]], i64 40, i64 %[[VAL_13]]
// CHECK: call void @llvm.memmove.p0.p0.i64(ptr %[[VAL_0]], ptr %[[VAL_14]], i64 %[[VAL_31]], i1 false)
// CHECK: call void @llvm.memmove.p0.p0.i64(ptr %[[VAL_0]], ptr %[[VAL_14]], i64 %[[VAL_31]], i8 0)
// CHECK: %[[VAL_32:.*]] = sub i64 40, %[[VAL_31]]
// CHECK: %[[VAL_35:.*]] = phi i64
// CHECK: %[[VAL_37:.*]] = phi i64
Expand All @@ -156,6 +156,7 @@ func.func @_QPtest_proc_dummy_char() {
%c10_i64 = arith.constant 10 : i64
%c40 = arith.constant 40 : index
%c0 = arith.constant 0 : index
%c0_i8 = arith.constant 0 : i8
%0 = fir.alloca !fir.char<1,40> {bindc_name = ".result"}
%1 = fir.alloca !fir.char<1,10> {bindc_name = "message", uniq_name = "_QFtest_proc_dummy_charEmessage"}
%2 = fir.alloca tuple<!fir.boxchar<1>>
Expand All @@ -167,7 +168,7 @@ func.func @_QPtest_proc_dummy_char() {
%7 = fir.convert %c9 : (index) -> i64
%8 = fir.convert %1 : (!fir.ref<!fir.char<1,10>>) -> !fir.ref<i8>
%9 = fir.convert %6 : (!fir.ref<!fir.char<1,9>>) -> !fir.ref<i8>
fir.call @llvm.memmove.p0.p0.i64(%8, %9, %7, %false) : (!fir.ref<i8>, !fir.ref<i8>, i64, i1) -> ()
fir.call @llvm.memmove.p0.p0.i64(%8, %9, %7, %c0_i8) : (!fir.ref<i8>, !fir.ref<i8>, i64, i8) -> ()
%10 = fir.undefined !fir.char<1>
%11 = fir.insert_value %10, %c32_i8, [0 : index] : (!fir.char<1>, i8) -> !fir.char<1>
cf.br ^bb1(%c9, %c1 : index, index)
Expand Down Expand Up @@ -205,6 +206,7 @@ func.func @_QFtest_proc_dummy_charPgen_message(%arg0: !fir.ref<!fir.char<1,10>>,
%false = arith.constant false
%c1 = arith.constant 1 : index
%c32_i8 = arith.constant 32 : i8
%c0_i8 = arith.constant 0 : i8
%c0 = arith.constant 0 : index
%0 = fir.coordinate_of %arg2, %c0_i32 : (!fir.ref<tuple<!fir.boxchar<1>>>, i32) -> !fir.ref<!fir.boxchar<1>>
%1 = fir.load %0 : !fir.ref<!fir.boxchar<1>>
Expand All @@ -215,7 +217,7 @@ func.func @_QFtest_proc_dummy_charPgen_message(%arg0: !fir.ref<!fir.char<1,10>>,
%6 = fir.convert %5 : (index) -> i64
%7 = fir.convert %3 : (!fir.ref<!fir.char<1,?>>) -> !fir.ref<i8>
%8 = fir.convert %2#0 : (!fir.ref<!fir.char<1,?>>) -> !fir.ref<i8>
fir.call @llvm.memmove.p0.p0.i64(%7, %8, %6, %false) : (!fir.ref<i8>, !fir.ref<i8>, i64, i1) -> ()
fir.call @llvm.memmove.p0.p0.i64(%7, %8, %6, %c0_i8) : (!fir.ref<i8>, !fir.ref<i8>, i64, i8) -> ()
%9 = fir.undefined !fir.char<1>
%10 = fir.insert_value %9, %c32_i8, [0 : index] : (!fir.char<1>, i8) -> !fir.char<1>
%11 = arith.subi %c10, %5 : index
Expand All @@ -240,6 +242,7 @@ func.func @_QPget_message(%arg0: !fir.ref<!fir.char<1,40>>, %arg1: index, %arg2:
%false = arith.constant false
%c1 = arith.constant 1 : index
%c32_i8 = arith.constant 32 : i8
%c0_i8 = arith.constant 0 : i8
%c0 = arith.constant 0 : index
%0 = fir.convert %arg0 : (!fir.ref<!fir.char<1,40>>) -> !fir.ref<!fir.char<1,?>>
%1 = fir.address_of(@_QQcl.6D6573736167652069733A20) : !fir.ref<!fir.char<1,12>>
Expand All @@ -256,7 +259,7 @@ func.func @_QPget_message(%arg0: !fir.ref<!fir.char<1,40>>, %arg1: index, %arg2:
%12 = fir.convert %c12 : (index) -> i64
%13 = fir.convert %11 : (!fir.ref<!fir.char<1,?>>) -> !fir.ref<i8>
%14 = fir.convert %1 : (!fir.ref<!fir.char<1,12>>) -> !fir.ref<i8>
fir.call @llvm.memmove.p0.p0.i64(%13, %14, %12, %false) : (!fir.ref<i8>, !fir.ref<i8>, i64, i1) -> ()
fir.call @llvm.memmove.p0.p0.i64(%13, %14, %12, %c0_i8) : (!fir.ref<i8>, !fir.ref<i8>, i64, i8) -> ()
cf.br ^bb1(%c12, %8 : index, index)
^bb1(%15: index, %16: index): // 2 preds: ^bb0, ^bb2
%17 = arith.cmpi sgt, %16, %c0 : index
Expand All @@ -277,7 +280,7 @@ func.func @_QPget_message(%arg0: !fir.ref<!fir.char<1,40>>, %arg1: index, %arg2:
%27 = arith.select %26, %c40, %10 : index
%28 = fir.convert %27 : (index) -> i64
%29 = fir.convert %0 : (!fir.ref<!fir.char<1,?>>) -> !fir.ref<i8>
fir.call @llvm.memmove.p0.p0.i64(%29, %13, %28, %false) : (!fir.ref<i8>, !fir.ref<i8>, i64, i1) -> ()
fir.call @llvm.memmove.p0.p0.i64(%29, %13, %28, %c0_i8) : (!fir.ref<i8>, !fir.ref<i8>, i64, i8) -> ()
%30 = fir.undefined !fir.char<1>
%31 = fir.insert_value %30, %c32_i8, [0 : index] : (!fir.char<1>, i8) -> !fir.char<1>
%32 = arith.subi %c40, %27 : index
Expand All @@ -301,7 +304,7 @@ fir.global linkonce @_QQcl.486920746865726521 constant : !fir.char<1,9> {
%0 = fir.string_lit "Hi there!"(9) : !fir.char<1,9>
fir.has_value %0 : !fir.char<1,9>
}
func.func private @llvm.memmove.p0.p0.i64(!fir.ref<i8>, !fir.ref<i8>, i64, i1)
func.func private @llvm.memmove.p0.p0.i64(!fir.ref<i8>, !fir.ref<i8>, i64, i8)
fir.global linkonce @_QQcl.2E2F682E66393000 constant : !fir.char<1,8> {
%0 = fir.string_lit "./h.f90\00"(8) : !fir.char<1,8>
fir.has_value %0 : !fir.char<1,8>
Expand Down
4 changes: 2 additions & 2 deletions 4 flang/test/HLFIR/assign-codegen.fir
Original file line number Diff line number Diff line change
Expand Up @@ -104,10 +104,10 @@ func.func @scalar_character(%arg0: !fir.boxchar<1>, %arg1: !fir.boxchar<1>) {
// CHECK: %[[VAL_10:.*]] = arith.constant 1 : i64
// CHECK: %[[VAL_11:.*]] = fir.convert %[[VAL_9]] : (index) -> i64
// CHECK: %[[VAL_12:.*]] = arith.muli %[[VAL_10]], %[[VAL_11]] : i64
// CHECK: %[[VAL_13:.*]] = arith.constant false
// CHECK: %[[VAL_13:.*]] = arith.constant 0 : i8
// CHECK: %[[VAL_14:.*]] = fir.convert %[[VAL_3]] : (!fir.ref<!fir.char<1,?>>) -> !fir.ref<i8>
// CHECK: %[[VAL_15:.*]] = fir.convert %[[VAL_6]] : (!fir.ref<!fir.char<1,?>>) -> !fir.ref<i8>
// CHECK: fir.call @llvm.memmove.p0.p0.i64(%[[VAL_14]], %[[VAL_15]], %[[VAL_12]], %[[VAL_13]]) : (!fir.ref<i8>, !fir.ref<i8>, i64, i1) -> ()
// CHECK: fir.call @llvm.memmove.p0.p0.i64(%[[VAL_14]], %[[VAL_15]], %[[VAL_12]], %[[VAL_13]]) : (!fir.ref<i8>, !fir.ref<i8>, i64, i8) -> ()
// CHECK: %[[VAL_16:.*]] = arith.constant 1 : index
// CHECK: %[[VAL_17:.*]] = arith.subi %[[VAL_2]]#1, %[[VAL_16]] : index
// CHECK: %[[VAL_18:.*]] = arith.constant 32 : i8
Expand Down
4 changes: 2 additions & 2 deletions 4 flang/test/HLFIR/associate-codegen.fir
Original file line number Diff line number Diff line change
Expand Up @@ -80,10 +80,10 @@ func.func @associate_char(%arg0: !fir.boxchar<1> ) {
// CHECK: %[[VAL_9:.*]] = arith.constant 1 : i64
// CHECK: %[[VAL_10:.*]] = fir.convert %[[VAL_2]]#1 : (index) -> i64
// CHECK: %[[VAL_11:.*]] = arith.muli %[[VAL_9]], %[[VAL_10]] : i64
// CHECK: %[[VAL_12:.*]] = arith.constant false
// CHECK: %[[VAL_12:.*]] = arith.constant 0 : i8
// CHECK: %[[VAL_13:.*]] = fir.convert %[[VAL_8]] : (!fir.ref<!fir.char<1,?>>) -> !fir.ref<i8>
// CHECK: %[[VAL_14:.*]] = fir.convert %[[VAL_3]]#1 : (!fir.ref<!fir.char<1,?>>) -> !fir.ref<i8>
// CHECK: fir.call @llvm.memmove.p0.p0.i64(%[[VAL_13]], %[[VAL_14]], %[[VAL_11]], %[[VAL_12]]) : (!fir.ref<i8>, !fir.ref<i8>, i64, i1) -> ()
// CHECK: fir.call @llvm.memmove.p0.p0.i64(%[[VAL_13]], %[[VAL_14]], %[[VAL_11]], %[[VAL_12]]) : (!fir.ref<i8>, !fir.ref<i8>, i64, i8) -> ()
// CHECK: %[[VAL_15:.*]] = arith.constant 1 : index
// CHECK: %[[VAL_16:.*]] = arith.subi %[[VAL_7]], %[[VAL_15]] : index
// CHECK: fir.do_loop %[[VAL_17:.*]] = %[[VAL_2]]#1 to %[[VAL_16]] step %[[VAL_15]] {
Expand Down
24 changes: 12 additions & 12 deletions 24 flang/test/HLFIR/char_extremum-bufferization.fir
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,10 @@ func.func @_QPmax1(%arg0: !fir.boxchar<1> {fir.bindc_name = "c1"}, %arg1: !fir.b
// CHECK: %[[C1_I64:.*]] = arith.constant 1 : i64
// CHECK: %[[VAL_19:.*]] = fir.convert %[[VAL_18]] : (index) -> i64
// CHECK: %[[VAL_20:.*]] = arith.muli %[[C1_I64]], %[[VAL_19]] : i64
// CHECK: %[[FALSE:.*]] = arith.constant false
// CHECK: %[[FALSE:.*]] = arith.constant 0 : i8
// CHECK: %[[VAL_21:.*]] = fir.convert %[[VAL_16]] : (!fir.ref<!fir.char<1,?>>) -> !fir.ref<i8>
// CHECK: %[[VAL_22:.*]] = fir.convert %[[VAL_14]] : (!fir.ref<!fir.char<1,?>>) -> !fir.ref<i8>
// CHECK: fir.call @llvm.memmove.p0.p0.i64(%[[VAL_21]], %[[VAL_22]], %[[VAL_20]], %[[FALSE]]) : (!fir.ref<i8>, !fir.ref<i8>, i64, i1) -> ()
// CHECK: fir.call @llvm.memmove.p0.p0.i64(%[[VAL_21]], %[[VAL_22]], %[[VAL_20]], %[[FALSE]]) : (!fir.ref<i8>, !fir.ref<i8>, i64, i8) -> ()
// CHECK: %[[C1:.*]] = arith.constant 1 : index
// CHECK: %[[VAL_23:.*]] = arith.subi %[[VAL_7]], %[[C1]] : index
// CHECK: %[[C32_I8:.*]] = arith.constant 32 : i8
Expand Down Expand Up @@ -100,10 +100,10 @@ func.func @_QPmin1(%arg0: !fir.boxchar<1> {fir.bindc_name = "c1"}, %arg1: !fir.b
// CHECK: %[[C1_I64:.*]] = arith.constant 1 : i64
// CHECK: %[[VAL_19:.*]] = fir.convert %[[VAL_18]] : (index) -> i64
// CHECK: %[[VAL_20:.*]] = arith.muli %[[C1_I64]], %[[VAL_19]] : i64
// CHECK: %[[FALSE:.*]] = arith.constant false
// CHECK: %[[FALSE:.*]] = arith.constant 0 : i8
// CHECK: %[[VAL_21:.*]] = fir.convert %[[VAL_16]] : (!fir.ref<!fir.char<1,?>>) -> !fir.ref<i8>
// CHECK: %[[VAL_22:.*]] = fir.convert %[[VAL_14]] : (!fir.ref<!fir.char<1,?>>) -> !fir.ref<i8>
// CHECK: fir.call @llvm.memmove.p0.p0.i64(%[[VAL_21]], %[[VAL_22]], %[[VAL_20]], %[[FALSE]]) : (!fir.ref<i8>, !fir.ref<i8>, i64, i1) -> ()
// CHECK: fir.call @llvm.memmove.p0.p0.i64(%[[VAL_21]], %[[VAL_22]], %[[VAL_20]], %[[FALSE]]) : (!fir.ref<i8>, !fir.ref<i8>, i64, i8) -> ()
// CHECK: %[[C1:.*]] = arith.constant 1 : index
// CHECK: %[[VAL_23:.*]] = arith.subi %[[VAL_7]], %[[C1]] : index
// CHECK: %[[C32_I8:.*]] = arith.constant 32 : i8
Expand Down Expand Up @@ -195,10 +195,10 @@ func.func @_QPmax2(%arg0: !fir.boxchar<1> {fir.bindc_name = "c1"}, %arg1: !fir.b
// CHECK: %[[C1_I64:.*]] = arith.constant 1 : i64
// CHECK: %[[VAL_29:.*]] = fir.convert %[[VAL_28]] : (index) -> i64
// CHECK: %[[VAL_30:.*]] = arith.muli %[[C1_I64]], %[[VAL_29]] : i64
// CHECK: %[[FALSE:.*]] = arith.constant false
// CHECK: %[[NOTVOLATILE:.*]] = arith.constant 0 : i8
// CHECK: %[[VAL_31:.*]] = fir.convert %[[VAL_26]] : (!fir.ref<!fir.char<1,?>>) -> !fir.ref<i8>
// CHECK: %[[VAL_32:.*]] = fir.convert %[[VAL_24]] : (!fir.ref<!fir.char<1,?>>) -> !fir.ref<i8>
// CHECK: fir.call @llvm.memmove.p0.p0.i64(%[[VAL_31]], %[[VAL_32]], %[[VAL_30]], %[[FALSE]]) : (!fir.ref<i8>, !fir.ref<i8>, i64, i1) -> ()
// CHECK: fir.call @llvm.memmove.p0.p0.i64(%[[VAL_31]], %[[VAL_32]], %[[VAL_30]], %[[NOTVOLATILE]]) : (!fir.ref<i8>, !fir.ref<i8>, i64, i8) -> ()
// CHECK: %[[C1_3:.*]] = arith.constant 1 : index
// CHECK: %[[VAL_33:.*]] = arith.subi %[[VAL_15]], %[[C1_3]] : index
// CHECK: %[[C32_I8:.*]] = arith.constant 32 : i8
Expand Down Expand Up @@ -293,10 +293,10 @@ func.func @_QPmin2(%arg0: !fir.boxchar<1> {fir.bindc_name = "c1"}, %arg1: !fir.b
// CHECK: %[[C1_I64:.*]] = arith.constant 1 : i64
// CHECK: %[[VAL_29:.*]] = fir.convert %[[VAL_28]] : (index) -> i64
// CHECK: %[[VAL_30:.*]] = arith.muli %[[C1_I64]], %[[VAL_29]] : i64
// CHECK: %[[FALSE:.*]] = arith.constant false
// CHECK: %[[NOTVOLATILE:.*]] = arith.constant 0 : i8
// CHECK: %[[VAL_31:.*]] = fir.convert %[[VAL_26]] : (!fir.ref<!fir.char<1,?>>) -> !fir.ref<i8>
// CHECK: %[[VAL_32:.*]] = fir.convert %[[VAL_24]] : (!fir.ref<!fir.char<1,?>>) -> !fir.ref<i8>
// CHECK: fir.call @llvm.memmove.p0.p0.i64(%[[VAL_31]], %[[VAL_32]], %[[VAL_30]], %[[FALSE]]) : (!fir.ref<i8>, !fir.ref<i8>, i64, i1) -> ()
// CHECK: fir.call @llvm.memmove.p0.p0.i64(%[[VAL_31]], %[[VAL_32]], %[[VAL_30]], %[[NOTVOLATILE]]) : (!fir.ref<i8>, !fir.ref<i8>, i64, i8) -> ()
// CHECK: %[[C1_3:.*]] = arith.constant 1 : index
// CHECK: %[[VAL_33:.*]] = arith.subi %[[VAL_15]], %[[C1_3]] : index
// CHECK: %[[C32_I8:.*]] = arith.constant 32 : i8
Expand Down Expand Up @@ -372,10 +372,10 @@ func.func @_QPmax3(%arg0: !fir.boxchar<1> {fir.bindc_name = "c1"}, %arg1: !fir.b
// CHECK: %[[C1_I64:.*]] = arith.constant 1 : i64
// CHECK: %[[VAL_31:.*]] = fir.convert %[[VAL_30]] : (index) -> i64
// CHECK: %[[VAL_32:.*]] = arith.muli %[[C1_I64]], %[[VAL_31]] : i64
// CHECK: %[[FALSE:.*]] = arith.constant false
// CHECK: %[[NOTVOLATILE:.*]] = arith.constant 0 : i8
// CHECK: %[[VAL_33:.*]] = fir.convert %[[VAL_28]] : (!fir.ref<!fir.char<1,?>>) -> !fir.ref<i8>
// CHECK: %[[VAL_34:.*]] = fir.convert %[[VAL_26]] : (!fir.ref<!fir.char<1,?>>) -> !fir.ref<i8>
// CHECK: fir.call @llvm.memmove.p0.p0.i64(%[[VAL_33]], %[[VAL_34]], %[[VAL_32]], %[[FALSE]]) : (!fir.ref<i8>, !fir.ref<i8>, i64, i1) -> ()
// CHECK: fir.call @llvm.memmove.p0.p0.i64(%[[VAL_33]], %[[VAL_34]], %[[VAL_32]], %[[NOTVOLATILE]]) : (!fir.ref<i8>, !fir.ref<i8>, i64, i8) -> ()
// CHECK: %[[C1:.*]] = arith.constant 1 : index
// CHECK: %[[VAL_35:.*]] = arith.subi %[[VAL_19]], %[[C1]] : index
// CHECK: %[[C32_I8:.*]] = arith.constant 32 : i8
Expand Down Expand Up @@ -448,10 +448,10 @@ func.func @_QPmin3(%arg0: !fir.boxchar<1> {fir.bindc_name = "c1"}, %arg1: !fir.b
// CHECK: %[[C1_I64:.*]] = arith.constant 1 : i64
// CHECK: %[[VAL_31:.*]] = fir.convert %[[VAL_30]] : (index) -> i64
// CHECK: %[[VAL_32:.*]] = arith.muli %[[C1_I64]], %[[VAL_31]] : i64
// CHECK: %[[FALSE:.*]] = arith.constant false
// CHECK: %[[NOTVOLATILE:.*]] = arith.constant 0 : i8
// CHECK: %[[VAL_33:.*]] = fir.convert %[[VAL_28]] : (!fir.ref<!fir.char<1,?>>) -> !fir.ref<i8>
// CHECK: %[[VAL_34:.*]] = fir.convert %[[VAL_26]] : (!fir.ref<!fir.char<1,?>>) -> !fir.ref<i8>
// CHECK: fir.call @llvm.memmove.p0.p0.i64(%[[VAL_33]], %[[VAL_34]], %[[VAL_32]], %[[FALSE]]) : (!fir.ref<i8>, !fir.ref<i8>, i64, i1) -> ()
// CHECK: fir.call @llvm.memmove.p0.p0.i64(%[[VAL_33]], %[[VAL_34]], %[[VAL_32]], %[[NOTVOLATILE]]) : (!fir.ref<i8>, !fir.ref<i8>, i64, i8) -> ()
// CHECK: %[[C1:.*]] = arith.constant 1 : index
// CHECK: %[[VAL_35:.*]] = arith.subi %[[VAL_19]], %[[C1]] : index
// CHECK: %[[C32_I8:.*]] = arith.constant 32 : i8
Expand Down
Loading
Morty Proxy This is a proxified and sanitized view of the page, visit original site.