Skip to content

Commit 6e1e37f

Browse files
committed
Create a test for issue llvm#163082.
1 parent 2121bda commit 6e1e37f

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
; RUN: llc < %s -mtriple=avr | FileCheck -v -dump-input always %s
2+
3+
%Tstats = type <{ i8, i8 }>
4+
@ui1 = protected local_unnamed_addr global i64 zeroinitializer, align 8
5+
@ui2 = protected local_unnamed_addr global i64 zeroinitializer, align 8
6+
@failed = private unnamed_addr addrspace(1) constant [12 x i8] c"test failed\00"
7+
@stats = external protected global %Tstats, align 1
8+
9+
; CHECK-LABEL: main:
10+
define protected noundef i32 @main(i32 %0, ptr nocapture readnone %1) local_unnamed_addr addrspace(1) #0 {
11+
entry:
12+
store i64 94, ptr @ui1, align 8
13+
store i64 53, ptr @ui2, align 8
14+
tail call addrspace(1) void @reportFailureWithDetails(i16 ptrtoint (ptr addrspace(1) @failed to i16), i16 11, i8 2, i16 32, ptr nocapture nonnull swiftself dereferenceable(2) @stats)
15+
%11 = load i64, ptr @ui1, align 8
16+
%12 = load i64, ptr @ui2, align 8
17+
18+
; COM: CHECK: call __udivdi3
19+
%15 = udiv i64 %11, %12
20+
21+
; look for the buggy pattern where r30/r31 are being clobbered, corrupting the stack pointer
22+
; CHECK-NOT: std Z+{{[1-9]+}}, r30
23+
; CHECK-NOT: std Z+{{[1-9]+}}, r31
24+
25+
; CHECK: call expect
26+
tail call addrspace(1) void @expect(i64 %15, i64 1, i16 ptrtoint (ptr addrspace(1) @failed to i16), i16 11, i8 2, i16 33)
27+
28+
; CHECK: ret
29+
ret i32 0
30+
}
31+
32+
declare protected void @expect(i64, i64, i16, i16, i8, i16) local_unnamed_addr addrspace(1) #0
33+
declare protected void @reportFailureWithDetails(i16, i16, i8, i16, ptr nocapture swiftself dereferenceable(2)) local_unnamed_addr addrspace(1) #0
34+
attributes #0 = { nounwind "frame-pointer"="all" "no-trapping-math"="true" "stack-protector-buffer-size"="8" }

0 commit comments

Comments
 (0)