brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.6 KiB · aba38d7 Raw
219 lines · plain
1; RUN: llc < %s | FileCheck %s2 3target datalayout = "e-p:16:16:16-i8:8:8-i16:16:16-i32:16:32-n8:16-a0:16:16"4target triple = "msp430---elf"5 6define void @test() #0 {7entry:8; CHECK: test:9 10; CHECK: mov #1, r1211; CHECK: call #f_i1612  call void @f_i16(i16 1)13 14; CHECK: mov #772, r1215; CHECK: mov #258, r1316; CHECK: call #f_i3217  call void @f_i32(i32 16909060)18 19; CHECK: mov #1800, r1220; CHECK: mov #1286, r1321; CHECK: mov #772, r1422; CHECK: mov #258, r1523; CHECK: call #f_i6424  call void @f_i64(i64 72623859790382856)25 26; CHECK: mov #772, r1227; CHECK: mov #258, r1328; CHECK: mov #1800, r1429; CHECK: mov #1286, r1530; CHECK: call #f_i32_i3231  call void @f_i32_i32(i32 16909060, i32 84281096)32 33; CHECK: mov #1, r1234; CHECK: mov #772, r1335; CHECK: mov #258, r1436; CHECK: mov #2, r1537; CHECK: call #f_i16_i32_i1638  call void @f_i16_i32_i16(i16 1, i32 16909060, i16 2)39 40; CHECK: mov #1286, 0(r1)41; CHECK: mov #1, r1242; CHECK: mov #772, r1343; CHECK: mov #258, r1444; CHECK: mov #1800, r1545; CHECK: call #f_i16_i32_i3246  call void @f_i16_i32_i32(i16 1, i32 16909060, i32 84281096)47 48; CHECK: mov #258, 6(r1)49; CHECK: mov #772, 4(r1)50; CHECK: mov #1286, 2(r1)51; CHECK: mov #1800, 0(r1)52; CHECK: mov #1, r1253; CHECK: mov #2, r1354; CHECK: call #f_i16_i64_i1655  call void @f_i16_i64_i16(i16 1, i64 72623859790382856, i16 2)56 57; Check that r15 is not used and the last i32 argument passed through the stack.58; CHECK: mov	#258, 10(r1)59; CHECK: mov	#772, 8(r1)60; CHECK: mov	#258, 6(r1)61; CHECK: mov	#772, 4(r1)62; CHECK: mov	#1286, 2(r1)63; CHECK: mov	#1800, 0(r1)64; CHECK: mov	#1, r1265; CHECK: mov	#772, r1366; CHECK: mov	#258, r1467  call void @f_i16_i64_i32_i32(i16 1, i64 72623859790382856, i32 16909060, i32 16909060)68 69; CHECK: mov	#258, 6(r1)70; CHECK: mov	#772, 4(r1)71; CHECK: mov	#1286, 2(r1)72; CHECK: mov	#1800, 0(r1)73; CHECK: mov	#1800, r1274; CHECK: mov	#1286, r1375; CHECK: mov	#772, r1476; CHECK: mov	#258, r1577; CHECK: call	#f_i64_i6478  call void @f_i64_i64(i64 72623859790382856, i64 72623859790382856)79 80  ret void81}82 83@g_i16 = common global i16 0, align 284@g_i32 = common global i32 0, align 285@g_i64 = common global i64 0, align 286 87define void @f_i16(i16 %a) #0 {88; CHECK: f_i16:89; CHECK: mov r12, &g_i1690  store volatile i16 %a, ptr @g_i16, align 291  ret void92}93 94define void @f_i32(i32 %a) #0 {95; CHECK: f_i32:96; CHECK: mov r13, &g_i32+297; CHECK: mov r12, &g_i3298  store volatile i32 %a, ptr @g_i32, align 299  ret void100}101 102define void @f_i64(i64 %a) #0 {103; CHECK: f_i64:104; CHECK: mov r15, &g_i64+6105; CHECK: mov r14, &g_i64+4106; CHECK: mov r13, &g_i64+2107; CHECK: mov r12, &g_i64108  store volatile i64 %a, ptr @g_i64, align 2109  ret void110}111 112define void @f_i32_i32(i32 %a, i32 %b) #0 {113; CHECK: f_i32_i32:114; CHECK: mov r13, &g_i32+2115; CHECK: mov r12, &g_i32116  store volatile i32 %a, ptr @g_i32, align 2117; CHECK: mov r15, &g_i32+2118; CHECK: mov r14, &g_i32119  store volatile i32 %b, ptr @g_i32, align 2120  ret void121}122 123define void @f_i16_i32_i32(i16 %a, i32 %b, i32 %c) #0 {124; CHECK: f_i16_i32_i32:125; CHECK: mov r12, &g_i16126  store volatile i16 %a, ptr @g_i16, align 2127; CHECK: mov r14, &g_i32+2128; CHECK: mov r13, &g_i32129  store volatile i32 %b, ptr @g_i32, align 2130; CHECK: mov r15, &g_i32131; CHECK: mov 4(r4), &g_i32+2132  store volatile i32 %c, ptr @g_i32, align 2133  ret void134}135 136define void @f_i16_i32_i16(i16 %a, i32 %b, i16 %c) #0 {137; CHECK: f_i16_i32_i16:138; CHECK: mov r12, &g_i16139  store volatile i16 %a, ptr @g_i16, align 2140; CHECK: mov r14, &g_i32+2141; CHECK: mov r13, &g_i32142  store volatile i32 %b, ptr @g_i32, align 2143; CHECK: mov r15, &g_i16144  store volatile i16 %c, ptr @g_i16, align 2145  ret void146}147 148define void @f_i16_i64_i16(i16 %a, i64 %b, i16 %c) #0 {149; CHECK: f_i16_i64_i16:150; CHECK: mov r12, &g_i16151  store volatile i16 %a, ptr @g_i16, align 2152;CHECK: mov 10(r4), &g_i64+6153;CHECK: mov 8(r4), &g_i64+4154;CHECK: mov 6(r4), &g_i64+2155;CHECK: mov 4(r4), &g_i64156  store volatile i64 %b, ptr @g_i64, align 2157;CHECK: mov r13, &g_i16158  store volatile i16 %c, ptr @g_i16, align 2159  ret void160}161 162define void @f_i64_i64(i64 %a, i64 %b) #0 {163; CHECK: f_i64_i64:164; CHECK: mov	r15, &g_i64+6165; CHECK: mov	r14, &g_i64+4166; CHECK: mov	r13, &g_i64+2167; CHECK: mov	r12, &g_i64168  store volatile i64 %a, ptr @g_i64, align 2169; CHECK-DAG: mov	10(r4), &g_i64+6170; CHECK-DAG: mov	8(r4), &g_i64+4171; CHECK-DAG: mov	6(r4), &g_i64+2172; CHECK-DAG: mov	4(r4), &g_i64173  store volatile i64 %b, ptr @g_i64, align 2174  ret void175}176 177define void @f_i16_i64_i32_i32(i16 %a, i64 %b, i32 %c, i32 %d) #0 {178; CHECK-LABEL: f_i16_i64_i32_i32:179; CHECK: mov	r12, &g_i16180  store volatile i16 %a, ptr @g_i16, align 2181; CHECK: mov	10(r4), &g_i64+6182; CHECK: mov	8(r4), &g_i64+4183; CHECK: mov	6(r4), &g_i64+2184; CHECK: mov	4(r4), &g_i64185  store volatile i64 %b, ptr @g_i64, align 2186; CHECK: mov	r14, &g_i32+2187; CHECK: mov	r13, &g_i32188  store volatile i32 %c, ptr @g_i32, align 2189; CHECK: mov	14(r4), &g_i32+2190; CHECK: mov	12(r4), &g_i32191  store volatile i32 %d, ptr @g_i32, align 2192  ret void193}194; MSP430 EABI p. 6.3195; For helper functions which take two long long arguments196; the first argument is passed in R8::R11 and the second argument197; is in R12::R15.198 199@g_i64_2 = common global i64 0, align 2200 201define i64 @helper_call_i64() #0 {202  %1 = load i64, ptr @g_i64, align 2203  %2 = load i64, ptr @g_i64_2, align 2204; CHECK-LABEL: helper_call_i64:205; CHECK: mov	&g_i64, r8206; CHECK: mov	&g_i64+2, r9207; CHECK: mov	&g_i64+4, r10208; CHECK: mov	&g_i64+6, r11209; CHECK: mov	&g_i64_2, r12210; CHECK: mov	&g_i64_2+2, r13211; CHECK: mov	&g_i64_2+4, r14212; CHECK: mov	&g_i64_2+6, r15213; CHECK: call	#__mspabi_divlli214  %3 = sdiv i64 %1, %2215  ret i64 %3216}217 218attributes #0 = { nounwind "less-precise-fpmad"="false" "frame-pointer"="all" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "unsafe-fp-math"="false" "use-soft-float"="false" }219