1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 2; RUN: llc < %s -O0 -march=nvptx64 -mcpu=sm_20 | FileCheck %s 3 4define [2 x i128] @foo(i64 %a, i32 %b) { 5; CHECK-LABEL: foo( 6; CHECK: { 7; CHECK-NEXT: .reg .b32 %r<2>; 8; CHECK-NEXT: .reg .b64 %rd<5>; 9; CHECK-EMPTY: 10; CHECK-NEXT: // %bb.0: 11; CHECK-NEXT: ld.param.u32 %r1, [foo_param_1]; 12; CHECK-NEXT: ld.param.u64 %rd1, [foo_param_0]; 13; CHECK-NEXT: shr.s64 %rd2, %rd1, 63; 14; CHECK-NEXT: cvt.s64.s32 %rd3, %r1; 15; CHECK-NEXT: shr.s64 %rd4, %rd3, 63; 16; CHECK-NEXT: st.param.v2.b64 [func_retval0], {%rd1, %rd2}; 17; CHECK-NEXT: st.param.v2.b64 [func_retval0+16], {%rd3, %rd4}; 18; CHECK-NEXT: ret; 19 %1 = sext i64 %a to i128 20 %2 = sext i32 %b to i128 21 %3 = insertvalue [2 x i128] undef, i128 %1, 0 22 %4 = insertvalue [2 x i128] %3, i128 %2, 1 23 24 ret [2 x i128] %4 25} 26 27define [2 x i128] @foo2(ptr byval([2 x i128]) %a) { 28; CHECK-LABEL: foo2( 29; CHECK: { 30; CHECK-NEXT: .reg .b64 %rd<6>; 31; CHECK-EMPTY: 32; CHECK-NEXT: // %bb.0: 33; CHECK-NEXT: mov.b64 %rd1, foo2_param_0; 34; CHECK-NEXT: ld.param.u64 %rd2, [foo2_param_0+8]; 35; CHECK-NEXT: ld.param.u64 %rd3, [foo2_param_0]; 36; CHECK-NEXT: ld.param.u64 %rd4, [foo2_param_0+24]; 37; CHECK-NEXT: ld.param.u64 %rd5, [foo2_param_0+16]; 38; CHECK-NEXT: st.param.v2.b64 [func_retval0], {%rd3, %rd2}; 39; CHECK-NEXT: st.param.v2.b64 [func_retval0+16], {%rd5, %rd4}; 40; CHECK-NEXT: ret; 41 %ptr0 = getelementptr [2 x i128], ptr %a, i64 0, i32 0 42 %1 = load i128, i128* %ptr0 43 %ptr1 = getelementptr [2 x i128], ptr %a, i64 0, i32 1 44 %2 = load i128, i128* %ptr1 45 %3 = insertvalue [2 x i128] undef, i128 %1, 0 46 %4 = insertvalue [2 x i128] %3, i128 %2, 1 47 48 ret [2 x i128] %4 49} 50 51define [2 x i128] @foo3([2 x i128] %a) { 52; CHECK-LABEL: foo3( 53; CHECK: { 54; CHECK-NEXT: .reg .b64 %rd<5>; 55; CHECK-EMPTY: 56; CHECK-NEXT: // %bb.0: 57; CHECK-NEXT: ld.param.v2.u64 {%rd3, %rd4}, [foo3_param_0+16]; 58; CHECK-NEXT: ld.param.v2.u64 {%rd1, %rd2}, [foo3_param_0]; 59; CHECK-NEXT: st.param.v2.b64 [func_retval0], {%rd1, %rd2}; 60; CHECK-NEXT: st.param.v2.b64 [func_retval0+16], {%rd3, %rd4}; 61; CHECK-NEXT: ret; 62 %1 = extractvalue [2 x i128] %a, 0 63 %2 = extractvalue [2 x i128] %a, 1 64 %3 = insertvalue [2 x i128] undef, i128 %1, 0 65 %4 = insertvalue [2 x i128] %3, i128 %2, 1 66 67 ret [2 x i128] %4 68} 69