blob: 96d341caffb535074d886ffbde7e77faeb251c1d [file] [edit]
/// Test i32 passing and returning on LoongArch64
/// LoongArch64 LP64D ABI requires unsigned 32 bit integers to be sign extended.
// RUN: fir-opt --target-rewrite="target=loongarch64-unknown-linux-gnu" %s | FileCheck %s --check-prefix=LOONGARCH64
// RUN: tco -target="loongarch64-unknown-linux-gnu" %s | FileCheck %s --check-prefix=LOONGARCH64_LLVM
module attributes {fir.defaultkind = "a1c4d8i4l4r4", fir.kindmap = "", llvm.data_layout = "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", llvm.target_triple = "loongarch64-unknown-linux-gnu"} {
// LOONGARCH64: func.func private @cfunc32(i32 {llvm.signext}) -> (i32 {llvm.signext}) attributes {fir.bindc_name = "cfunc32"}
// LOONGARCH64_LLVM: declare signext i32 @cfunc32(i32 signext)
func.func private @cfunc32(i32) -> i32 attributes {fir.bindc_name = "cfunc32"}
// LOONGARCH64-LABEL: func.func @foo(
// LOONGARCH64-SAME: %[[VAL_0:.*]]: i32 {llvm.signext}) -> (i32 {llvm.signext}) attributes {fir.bindc_name = "foo"} {
// LOONGARCH64: %[[VAL_1:.*]] = fir.call @cfunc32(%[[VAL_0]]) fastmath<contract> : (i32) -> i32
// LOONGARCH64: return %[[VAL_1]] : i32
// LOONGARCH64: }
// LOONGARCH64_LLVM-LABEL: define signext i32 @foo(
// LOONGARCH64_LLVM: i32 signext %[[VAL_0:.*]]) {
// LOONGARCH64_LLVM: %[[VAL_1:.*]] = call i32 @cfunc32(i32 %[[VAL_0]])
// LOONGARCH64_LLVM: ret i32 %[[VAL_1]]
// LOONGARCH64_LLVM: }
func.func @foo(%0: i32) -> i32 attributes {fir.bindc_name = "foo"} {
%1 = fir.call @cfunc32(%0) fastmath<contract> : (i32) -> i32
return %1 : i32
}
}