// RUN: cir-opt %s -cir-call-conv-lowering=target=test | FileCheck %s !s32i = !cir.int !s64i = !cir.int module attributes { dlti.dl_spec = #dlti.dl_spec< #dlti.dl_entry: vector<2xi64>>, #dlti.dl_entry: vector<2xi64>>, #dlti.dl_entry: vector<2xi64>>, #dlti.dl_entry: vector<2xi64>>, #dlti.dl_entry: vector<2xi64>>> } { // Register-sized integer args/returns are Direct under the test target. // Direct (without coercion) is a true pass-through — function signature // and call sites are unchanged. cir.func @passthrough(%arg0: !s32i, %arg1: !s64i) -> !s32i { cir.return %arg0 : !s32i } // CHECK: cir.func{{.*}} @passthrough(%arg0: !s32i, %arg1: !s64i) -> !s32i // CHECK-NEXT: cir.return %arg0 : !s32i cir.func @caller(%arg0: !s32i, %arg1: !s64i) -> !s32i { %0 = cir.call @passthrough(%arg0, %arg1) : (!s32i, !s64i) -> !s32i cir.return %0 : !s32i } // CHECK: cir.func{{.*}} @caller(%arg0: !s32i, %arg1: !s64i) -> !s32i // CHECK-NEXT: %[[RES:.*]] = cir.call @passthrough(%arg0, %arg1) : (!s32i, !s64i) -> !s32i // CHECK-NEXT: cir.return %[[RES]] : !s32i }