215 lines · plain
1 2; RUN: not --crash llc < %s -mtriple=xcore -code-model=medium 2>&1 | FileCheck %s -check-prefix=BAD_CM3; RUN: not --crash llc < %s -mtriple=xcore -code-model=kernel 2>&1 | FileCheck %s -check-prefix=BAD_CM4; RUN: not --crash llc < %s -mtriple=xcore -code-model=tiny 2>&1 | FileCheck %s -check-prefix=BAD_CM5; BAD_CM: Target only supports CodeModel Small or Large6 7 8; RUN: llc < %s -mtriple=xcore | FileCheck %s9; RUN: llc < %s -mtriple=xcore -code-model=small | FileCheck %s10; RUN: llc < %s -mtriple=xcore -code-model=large | FileCheck %s -check-prefix=LARGE11 12 13; CHECK-LABEL: test:14; CHECK: zext r0, 115; CHECK: bt r0, [[JUMP:.LBB[0-9_]*]]16; CHECK: ldaw r0, dp[A2]17; CHECK: retsp 018; CHECK: [[JUMP]]19; CHECK: ldaw r0, dp[A1]20; CHECK: retsp 021; LARGE-LABEL: test:22; LARGE: zext r0, 123; LARGE: ldaw r11, cp[.LCPI{{[0-9_]*}}]24; LARGE: mov r1, r1125; LARGE: ldaw r11, cp[.LCPI{{[0-9_]*}}]26; LARGE: bt r0, [[JUMP:.LBB[0-9_]*]]27; LARGE: mov r11, r128; LARGE: [[JUMP]]29; LARGE: ldw r0, r11[0]30; LARGE: retsp 031@A1 = external dso_local global [50000 x i32]32@A2 = external dso_local global [50000 x i32]33define ptr @test(i1 %bool) nounwind {34entry:35 %Addr = select i1 %bool, ptr @A1, ptr @A236 ret ptr %Addr37}38 39 40; CHECK: .section .cp.rodata.cst4,"aMc",@progbits,441; CHECK: .long 6553642; CHECK: .text43; CHECK-LABEL: f:44; CHECK: ldc r1, 6553245; CHECK: add r1, r0, r146; CHECK: ldw r1, r1[0]47; CHECK: ldw r2, cp[.LCPI{{[0-9_]*}}]48; CHECK: add r0, r0, r249; CHECK: ldw r0, r0[0]50; CHECK: add r0, r1, r051; CHECK: ldw r1, dp[l]52; CHECK: add r0, r0, r153; CHECK: ldw r1, dp[l+4]54; CHECK: add r0, r0, r155; CHECK: ldw r1, dp[l+392]56; CHECK: add r0, r0, r157; CHECK: ldw r1, dp[l+396]58; CHECK: add r0, r0, r159; CHECK: ldw r1, dp[s]60; CHECK: add r0, r0, r161; CHECK: ldw r1, dp[s+36]62; CHECK: add r0, r0, r163; CHECK: retsp 064;65; LARGE: .section .cp.rodata.cst4,"aMc",@progbits,466; LARGE: .long 6553667; LARGE: .section .cp.rodata,"ac",@progbits68; LARGE: .long l69; LARGE: .long l+470; LARGE: .long l+39271; LARGE: .long l+39672; LARGE: .text73; LARGE-LABEL: f:74; LARGE: ldc r1, 6553275; LARGE: add r1, r0, r176; LARGE: ldw r1, r1[0]77; LARGE: ldw r2, cp[.LCPI{{[0-9_]*}}]78; LARGE: add r0, r0, r279; LARGE: ldw r0, r0[0]80; LARGE: add r0, r1, r081; LARGE: ldw r1, cp[.LCPI{{[0-9_]*}}]82; LARGE: ldw r1, r1[0]83; LARGE: add r0, r0, r184; LARGE: ldw r1, cp[.LCPI{{[0-9_]*}}]85; LARGE: ldw r1, r1[0]86; LARGE: add r0, r0, r187; LARGE: ldw r1, cp[.LCPI{{[0-9_]*}}]88; LARGE: ldw r1, r1[0]89; LARGE: add r0, r0, r190; LARGE: ldw r1, cp[.LCPI{{[0-9_]*}}]91; LARGE: ldw r1, r1[0]92; LARGE: add r0, r0, r193; LARGE: ldw r1, dp[s]94; LARGE: add r0, r0, r195; LARGE: ldw r1, dp[s+36]96; LARGE: add r0, r0, r197; LARGE: retsp 098define dso_local i32 @f(ptr %i) {99entry:100 %0 = getelementptr inbounds i32, ptr %i, i32 16383101 %1 = load i32, ptr %0102 %2 = getelementptr inbounds i32, ptr %i, i32 16384103 %3 = load i32, ptr %2104 %4 = add nsw i32 %1, %3105 %5 = load i32, ptr @l106 %6 = add nsw i32 %4, %5107 %7 = load i32, ptr getelementptr inbounds ([100 x i32], ptr @l, i32 0, i32 1)108 %8 = add nsw i32 %6, %7109 %9 = load i32, ptr getelementptr inbounds ([100 x i32], ptr @l, i32 0, i32 98)110 %10 = add nsw i32 %8, %9111 %11 = load i32, ptr getelementptr inbounds ([100 x i32], ptr @l, i32 0, i32 99)112 %12 = add nsw i32 %10, %11113 %13 = load i32, ptr @s114 %14 = add nsw i32 %12, %13115 %15 = load i32, ptr getelementptr inbounds ([10 x i32], ptr @s, i32 0, i32 9)116 %16 = add nsw i32 %14, %15117 ret i32 %16118}119 120 121; CHECK-LABEL: UnknownSize:122; CHECK: ldw r0, dp[NoSize+40]123; CHECK-NEXT: retsp 0124;125; LARGE: .section .cp.rodata,"ac",@progbits126; LARGE: .LCPI{{[0-9_]*}}127; LARGE-NEXT: .long NoSize128; LARGE-NEXT: .text129; LARGE-LABEL: UnknownSize:130; LARGE: ldw r0, cp[.LCPI{{[0-9_]*}}]131; LARGE-NEXT: ldw r0, r0[0]132; LARGE-NEXT: retsp 0133@NoSize = external dso_local global [0 x i32]134define dso_local i32 @UnknownSize() nounwind {135entry:136 %0 = load i32, ptr getelementptr inbounds ([0 x i32], ptr @NoSize, i32 0, i32 10)137 ret i32 %0138}139 140 141; CHECK-LABEL: UnknownStruct:142; CHECK: ldaw r0, dp[Unknown]143; CHECK-NEXT: retsp 0144;145; LARGE: .section .cp.rodata,"ac",@progbits146; LARGE: .LCPI{{[0-9_]*}}147; LARGE-NEXT: .long Unknown148; LARGE-NEXT: .text149; LARGE-LABEL: UnknownStruct:150; LARGE: ldw r0, cp[.LCPI{{[0-9_]*}}]151; LARGE-NEXT: retsp 0152%Struct = type opaque153@Unknown = external dso_local global %Struct154define ptr @UnknownStruct() nounwind {155entry:156 ret ptr @Unknown157}158 159 160; CHECK: .section .dp.bss,"awd",@nobits161; CHECK-LABEL: l:162; CHECK: .space 400163; LARGE: .section .dp.bss.large,"awd",@nobits164; LARGE-LABEL: l:165; LARGE: .space 400166@l = dso_local global [100 x i32] zeroinitializer167 168; CHECK-LABEL: s:169; CHECK: .space 40170; LARGE: .section .dp.bss,"awd",@nobits171; LARGE-LABEL: s:172; LARGE: .space 40173@s = dso_local global [10 x i32] zeroinitializer174 175; CHECK: .section .dp.rodata,"awd",@progbits176; CHECK-LABEL: cl:177; CHECK: .space 400178; LARGE: .section .dp.rodata.large,"awd",@progbits179; LARGE-LABEL: cl:180; LARGE: .space 400181@cl = dso_local constant [100 x i32] zeroinitializer182 183; CHECK-LABEL: cs:184; CHECK: .space 40185; LARGE: .section .dp.rodata,"awd",@progbits186; LARGE-LABEL: cs:187; LARGE: .space 40188@cs = dso_local constant [10 x i32] zeroinitializer189 190; CHECK: .section .cp.rodata,"ac",@progbits191; CHECK-LABEL: icl:192; CHECK: .space 400193; LARGE: .section .cp.rodata.large,"ac",@progbits194; LARGE-LABEL: icl:195; LARGE: .space 400196@icl = internal constant [100 x i32] zeroinitializer197 198; CHECK-LABEL: cs:199; CHECK: .space 40200; LARGE: .section .cp.rodata,"ac",@progbits201; LARGE-LABEL: cs:202; LARGE: .space 40203@ics = internal constant [10 x i32] zeroinitializer204 205; CHECK: .section .cp.namedsection,"ac",@progbits206; CHECK-LABEL: cpsec:207; CHECK: .long 0208@cpsec = dso_local constant i32 0, section ".cp.namedsection"209 210; CHECK: .section .dp.namedsection,"awd",@progbits211; CHECK-LABEL: dpsec:212; CHECK: .long 0213@dpsec = dso_local global i32 0, section ".dp.namedsection"214 215