| ; RUN: llc < %s -mtriple=avr | FileCheck %s |
| |
| @ui1 = protected local_unnamed_addr global i64 zeroinitializer, align 8 |
| @ui2 = protected local_unnamed_addr global i64 zeroinitializer, align 8 |
| @failed = private unnamed_addr addrspace(1) constant [12 x i8] c"test failed\00" |
| @stats2 = external protected global i16, align 1 |
| |
| ; CHECK-LABEL: main: |
| define i32 @main() addrspace(1) { |
| entry: |
| store i64 94, ptr @ui1, align 8 |
| store i64 53, ptr @ui2, align 8 |
| tail call addrspace(1) void @foo(i16 ptrtoint (ptr addrspace(1) @failed to i16), i16 11, i8 2, i16 32, ptr @stats2) |
| %11 = load i64, ptr @ui1, align 8 |
| %12 = load i64, ptr @ui2, align 8 |
| |
| ; COM: CHECK: call __udivdi3 |
| %15 = udiv i64 %11, %12 |
| |
| ; look for the buggy pattern where r30/r31 are being clobbered, corrupting the stack pointer |
| ; CHECK-NOT: std Z+{{[1-9]+}}, r30 |
| ; CHECK-NOT: std Z+{{[1-9]+}}, r31 |
| |
| ; CHECK: call expect |
| tail call addrspace(1) void @expect(i64 %15, i64 1, i16 ptrtoint (ptr addrspace(1) @failed to i16), i16 11, i8 2, i16 33) |
| |
| ; CHECK: ret |
| ret i32 0 |
| } |
| |
| declare protected void @expect(i64, i64, i16, i16, i8, i16) local_unnamed_addr addrspace(1) #0 |
| declare protected void @foo(i16, i16, i8, i16, i16) local_unnamed_addr addrspace(1) #0 |