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