xref: /llvm-project/llvm/test/Transforms/Inline/promote-call-bitwidth.ll (revision ab15976173e45fd02eb61e922a95ad1f5127c9a0)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes
2; RUN: opt -S -passes=inline < %s | FileCheck %s
3
4;; Check that we correctly use the index size when accumulating offsets during CallPromotion
5
6target datalayout = "p200:128:128:128:64-A200-P200-G200"
7
8define void @test(ptr addrspace(200) %arg1, ptr addrspace(200) %arg2) local_unnamed_addr addrspace(200) {
9; CHECK-LABEL: define {{[^@]+}}@test
10; CHECK-SAME: (ptr addrspace(200) [[ARG1:%.*]], ptr addrspace(200) [[ARG2:%.*]]) local_unnamed_addr addrspace(200) {
11; CHECK-NEXT:  entry:
12; CHECK-NEXT:    [[TMP0:%.*]] = load ptr addrspace(200), ptr addrspace(200) [[ARG2]], align 16
13; CHECK-NEXT:    call addrspace(200) void [[TMP0]](ptr addrspace(200) [[ARG1]])
14; CHECK-NEXT:    ret void
15;
16entry:
17  call void @call_fnptr(ptr addrspace(200) %arg1, ptr addrspace(200) %arg2)
18  ret void
19}
20
21define internal void @call_fnptr(ptr addrspace(200) %this, ptr addrspace(200) %arg) unnamed_addr addrspace(200) align 2 {
22entry:
23  %0 = load ptr addrspace(200), ptr addrspace(200) %arg, align 16
24  call void %0(ptr addrspace(200) %this)
25  ret void
26}
27
28define void @test2(ptr addrspace(200) %this) local_unnamed_addr addrspace(200) {
29; CHECK-LABEL: define {{[^@]+}}@test2
30; CHECK-SAME: (ptr addrspace(200) [[THIS:%.*]]) local_unnamed_addr addrspace(200) {
31; CHECK-NEXT:  entry:
32; CHECK-NEXT:    [[VTABLE_I:%.*]] = load ptr addrspace(200), ptr addrspace(200) [[THIS]], align 16
33; CHECK-NEXT:    [[FN_I:%.*]] = load ptr addrspace(200), ptr addrspace(200) [[VTABLE_I]], align 16
34; CHECK-NEXT:    call addrspace(200) void [[FN_I]](ptr addrspace(200) [[THIS]])
35; CHECK-NEXT:    ret void
36;
37entry:
38  call void @call_via_vtable(ptr addrspace(200) %this)
39  ret void
40}
41
42define internal void @call_via_vtable(ptr addrspace(200) %this) unnamed_addr addrspace(200) {
43entry:
44  %vtable = load ptr addrspace(200), ptr addrspace(200) %this, align 16
45  %fn = load ptr addrspace(200), ptr addrspace(200) %vtable, align 16
46  call void %fn(ptr addrspace(200) %this)
47  ret void
48}
49