Skip to content

Commit 77cfb0d

Browse files
committed
[TPDE] Extend constant call arguments directly
1 parent 969ef05 commit 77cfb0d

2 files changed

Lines changed: 13 additions & 21 deletions

File tree

tpde-llvm/test/filetest/call.ll

Lines changed: 8 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1503,16 +1503,9 @@ define void @call_fn_v_i1z_i1s_i37z_i37s_const() {
15031503
; X64-NEXT: mov rbp, rsp
15041504
; X64-NEXT: sub rsp, 0x30
15051505
; X64-NEXT: xor edi, edi
1506-
; X64-NEXT: and edi, 0x1
1507-
; X64-NEXT: mov esi, 0x1
1508-
; X64-NEXT: shl rsi, 0x3f
1509-
; X64-NEXT: sar rsi, 0x3f
1506+
; X64-NEXT: mov rsi, -0x1
15101507
; X64-NEXT: movabs rdx, 0x1fffffff85
1511-
; X64-NEXT: movabs rax, 0x1fffffffff
1512-
; X64-NEXT: and rdx, rax
1513-
; X64-NEXT: movabs rcx, 0x1fffffff85
1514-
; X64-NEXT: shl rcx, 0x1b
1515-
; X64-NEXT: sar rcx, 0x1b
1508+
; X64-NEXT: mov rcx, -0x7b
15161509
; X64-NEXT: <L0>:
15171510
; X64-NEXT: call <L0>
15181511
; X64-NEXT: R_X86_64_PLT32 fn_v_i1z_i1s_i37z_i37s-0x4
@@ -1524,18 +1517,12 @@ define void @call_fn_v_i1z_i1s_i37z_i37s_const() {
15241517
; ARM64: stp x29, x30, [sp, #-0xa0]!
15251518
; ARM64-NEXT: mov x29, sp
15261519
; ARM64-NEXT: mov w0, #0x0 // =0
1527-
; ARM64-NEXT: ubfx x0, x0, #0, #1
1528-
; ARM64-NEXT: mov x1, #0x1 // =1
1529-
; ARM64-NEXT: sbfx x1, x1, #0, #1
1520+
; ARM64-NEXT: mov x1, #-0x1 // =-1
15301521
; ARM64-NEXT: mov x2, #0xff85 // =65413
15311522
; ARM64-NEXT: movk x2, #0xffff, lsl #16
15321523
; ARM64-NEXT: movk x2, #0x1f, lsl #32
1533-
; ARM64-NEXT: ubfx x2, x2, #0, #37
1534-
; ARM64-NEXT: mov x3, #0xff85 // =65413
1535-
; ARM64-NEXT: movk x3, #0xffff, lsl #16
1536-
; ARM64-NEXT: movk x3, #0x1f, lsl #32
1537-
; ARM64-NEXT: sbfx x3, x3, #0, #37
1538-
; ARM64-NEXT: bl 0x838 <call_fn_v_i1z_i1s_i37z_i37s_const+0x38>
1524+
; ARM64-NEXT: mov x3, #-0x7b // =-123
1525+
; ARM64-NEXT: bl 0x820 <call_fn_v_i1z_i1s_i37z_i37s_const+0x20>
15391526
; ARM64-NEXT: R_AARCH64_CALL26 fn_v_i1z_i1s_i37z_i37s
15401527
; ARM64-NEXT: ldp x29, x30, [sp], #0xa0
15411528
; ARM64-NEXT: ret
@@ -1615,7 +1602,7 @@ define void @call_fn_v_stack_i1z_i1s_i37z_i37s(i1 %a, i1 %b, i37 %c, i37 %d) {
16151602
; ARM64-NEXT: ldr x8, [x29, #0xb0]
16161603
; ARM64-NEXT: sbfx x8, x8, #0, #37
16171604
; ARM64-NEXT: str x8, [sp, #0x18]
1618-
; ARM64-NEXT: bl 0x8bc <call_fn_v_stack_i1z_i1s_i37z_i37s+0x6c>
1605+
; ARM64-NEXT: bl 0x89c <call_fn_v_stack_i1z_i1s_i37z_i37s+0x6c>
16191606
; ARM64-NEXT: R_AARCH64_CALL26 fn_v_stack_i1z_i1s_i37z_i37s
16201607
; ARM64-NEXT: add sp, sp, #0x20
16211608
; ARM64-NEXT: ldp x29, x30, [sp], #0xc0
@@ -1642,7 +1629,7 @@ define void @call_fn_a2s0_s0_s1s0_i32() {
16421629
; ARM64: stp x29, x30, [sp, #-0xa0]!
16431630
; ARM64-NEXT: mov x29, sp
16441631
; ARM64-NEXT: mov x0, #0x1 // =1
1645-
; ARM64-NEXT: bl 0x8dc <call_fn_a2s0_s0_s1s0_i32+0xc>
1632+
; ARM64-NEXT: bl 0x8bc <call_fn_a2s0_s0_s1s0_i32+0xc>
16461633
; ARM64-NEXT: R_AARCH64_CALL26 fn_a2s0_s0_s1s0_i32
16471634
; ARM64-NEXT: ldp x29, x30, [sp], #0xa0
16481635
; ARM64-NEXT: ret
@@ -1672,7 +1659,7 @@ define void @call_vararg_ind(i64 %a) {
16721659
; ARM64: stp x29, x30, [sp, #-0xb0]!
16731660
; ARM64-NEXT: mov x29, sp
16741661
; ARM64-NEXT: str x0, [x29, #0xa0]
1675-
; ARM64-NEXT: bl 0x8fc <call_vararg_ind+0xc>
1662+
; ARM64-NEXT: bl 0x8dc <call_vararg_ind+0xc>
16761663
; ARM64-NEXT: R_AARCH64_CALL26 fn_ptr
16771664
; ARM64-NEXT: str x0, [x29, #0xa8]
16781665
; ARM64-NEXT: ldr x0, [x29, #0xa0]

tpde/include/tpde/CompilerBase.hpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -627,6 +627,11 @@ void CompilerBase<Adaptor, Derived, Config>::CallBuilderBase<
627627
} else {
628628
compiler.mov(cca.reg, vp_reg, size);
629629
}
630+
} else if (needs_ext && vp.is_const()) {
631+
u64 val = vp.const_data()[0];
632+
u64 extended =
633+
ext_sign ? util::sext(val, ext_bits) : util::zext(val, ext_bits);
634+
compiler.materialize_constant(&extended, cca.bank, 8, cca.reg);
630635
} else {
631636
vp.reload_into_specific_fixed(&compiler, cca.reg);
632637
if (needs_ext) {

0 commit comments

Comments
 (0)