/// 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 : (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 : (i32) -> i32 return %1 : i32 } }