[RISCV] Add shrinkwrap test cases showing gaps in current impl
[llvm-project.git] / llvm / test / CodeGen / Hexagon / abi-padding-2.ll
blob9e5ec81742add929c32d17f170f6fb4071393580
1 ; RUN: llc -march=hexagon -mcpu=hexagonv65 < %s | FileCheck %s
3 ; C file was:
4 ; struct S { char b; long long a; };
5 ; void foo(int x, struct S arg1);
6 ; void bar() {
7 ;   struct S s;
8 ;   s.b = 'a';
9 ;   foo(42, s);
13 ; Test that while passing a 7-byte struct on the stack, the
14 ; size of the struct is 16 bytes including padding since its
15 ; largest member is of type long long. This was being handled
16 ; correctly but is a check against any potential future
17 ; regressions.
20 ; CHECK: memd(r{{[0-9]+}}+#8) =
21 ; CHECK: memd(r{{[0-9]+}}+#0) =
23 %struct.S = type { i8, i64 }
25 ; Function Attrs: nounwind
26 define dso_local void @bar() local_unnamed_addr #0 {
27 entry:
28   %s = alloca %struct.S, align 8
29   call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %s) #3
30   store i8 97, ptr %s, align 8
31   tail call void @foo(i32 42, ptr nonnull byval(%struct.S) align 8 %s) #3
32   call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %s) #3
33   ret void
36 ; Function Attrs: argmemonly nounwind willreturn
37 declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #1
39 declare dso_local void @foo(i32, ptr byval(%struct.S) align 8) local_unnamed_addr #2
41 ; Function Attrs: argmemonly nounwind willreturn
42 declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #1