brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.8 KiB · a62d4a0 Raw
252 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -verify-machineinstrs -o - -mtriple=aarch64-none-linux-gnu -code-model=tiny < %s | FileCheck %s3; RUN: llc -verify-machineinstrs -o - -mtriple=aarch64-none-linux-gnu -code-model=tiny -fast-isel < %s | FileCheck %s4; RUN: llc -verify-machineinstrs -o - -mtriple=aarch64-none-linux-gnu -code-model=tiny -global-isel < %s | FileCheck %s --check-prefix=CHECK-GLOBISEL5 6; Note fast-isel tests here will fall back to isel7 8@src = external local_unnamed_addr global [65536 x i8], align 19@dst = external global [65536 x i8], align 110@ptr = external local_unnamed_addr global ptr, align 811 12define dso_local void @foo1() {13; CHECK-LABEL: foo1:14; CHECK:       // %bb.0: // %entry15; CHECK-NEXT:    ldr x8, :got:src16; CHECK-NEXT:    ldrb w8, [x8]17; CHECK-NEXT:    ldr x9, :got:dst18; CHECK-NEXT:    strb w8, [x9]19; CHECK-NEXT:    ret20;21; CHECK-GLOBISEL-LABEL: foo1:22; CHECK-GLOBISEL:       // %bb.0: // %entry23; CHECK-GLOBISEL-NEXT:    ldr x8, :got:src24; CHECK-GLOBISEL-NEXT:    ldrb w8, [x8]25; CHECK-GLOBISEL-NEXT:    ldr x9, :got:dst26; CHECK-GLOBISEL-NEXT:    strb w8, [x9]27; CHECK-GLOBISEL-NEXT:    ret28entry:29  %0 = load i8, ptr @src, align 130  store i8 %0, ptr @dst, align 131  ret void32}33 34define dso_local void @foo2() {35; CHECK-LABEL: foo2:36; CHECK:       // %bb.0: // %entry37; CHECK-NEXT:    ldr x8, :got:ptr38; CHECK-NEXT:    ldr x9, :got:dst39; CHECK-NEXT:    str x9, [x8]40; CHECK-NEXT:    ret41;42; CHECK-GLOBISEL-LABEL: foo2:43; CHECK-GLOBISEL:       // %bb.0: // %entry44; CHECK-GLOBISEL-NEXT:    ldr x8, :got:ptr45; CHECK-GLOBISEL-NEXT:    ldr x9, :got:dst46; CHECK-GLOBISEL-NEXT:    str x9, [x8]47; CHECK-GLOBISEL-NEXT:    ret48entry:49  store ptr @dst, ptr @ptr, align 850  ret void51}52 53define dso_local void @foo3() {54; FIXME: Needn't adr ptr55;56; CHECK-LABEL: foo3:57; CHECK:       // %bb.0: // %entry58; CHECK-NEXT:    ldr x8, :got:src59; CHECK-NEXT:    ldr x9, :got:ptr60; CHECK-NEXT:    ldrb w8, [x8]61; CHECK-NEXT:    ldr x9, [x9]62; CHECK-NEXT:    strb w8, [x9]63; CHECK-NEXT:    ret64;65; CHECK-GLOBISEL-LABEL: foo3:66; CHECK-GLOBISEL:       // %bb.0: // %entry67; CHECK-GLOBISEL-NEXT:    ldr x8, :got:src68; CHECK-GLOBISEL-NEXT:    ldr x9, :got:ptr69; CHECK-GLOBISEL-NEXT:    ldrb w8, [x8]70; CHECK-GLOBISEL-NEXT:    ldr x9, [x9]71; CHECK-GLOBISEL-NEXT:    strb w8, [x9]72; CHECK-GLOBISEL-NEXT:    ret73entry:74  %0 = load i8, ptr @src, align 175  %1 = load ptr, ptr @ptr, align 876  store i8 %0, ptr %1, align 177  ret void78}79 80@lsrc = internal global i8 0, align 481@ldst = internal global i8 0, align 482@lptr = internal global ptr null, align 883 84define dso_local void @bar1() {85; CHECK-LABEL: bar1:86; CHECK:       // %bb.0: // %entry87; CHECK-NEXT:    adr x8, lsrc88; CHECK-NEXT:    adr x9, ldst89; CHECK-NEXT:    ldrb w8, [x8]90; CHECK-NEXT:    strb w8, [x9]91; CHECK-NEXT:    ret92;93; CHECK-GLOBISEL-LABEL: bar1:94; CHECK-GLOBISEL:       // %bb.0: // %entry95; CHECK-GLOBISEL-NEXT:    adr x8, lsrc96; CHECK-GLOBISEL-NEXT:    adr x9, ldst97; CHECK-GLOBISEL-NEXT:    ldrb w8, [x8]98; CHECK-GLOBISEL-NEXT:    strb w8, [x9]99; CHECK-GLOBISEL-NEXT:    ret100entry:101  %0 = load i8, ptr @lsrc, align 4102  store i8 %0, ptr @ldst, align 4103  ret void104}105 106define dso_local void @bar2() {107; CHECK-LABEL: bar2:108; CHECK:       // %bb.0: // %entry109; CHECK-NEXT:    adr x8, lptr110; CHECK-NEXT:    adr x9, ldst111; CHECK-NEXT:    str x9, [x8]112; CHECK-NEXT:    ret113;114; CHECK-GLOBISEL-LABEL: bar2:115; CHECK-GLOBISEL:       // %bb.0: // %entry116; CHECK-GLOBISEL-NEXT:    adr x8, lptr117; CHECK-GLOBISEL-NEXT:    adr x9, ldst118; CHECK-GLOBISEL-NEXT:    str x9, [x8]119; CHECK-GLOBISEL-NEXT:    ret120entry:121  store ptr @ldst, ptr @lptr, align 8122  ret void123}124 125define dso_local void @bar3() {126; FIXME: Needn't adr lptr127;128; CHECK-LABEL: bar3:129; CHECK:       // %bb.0: // %entry130; CHECK-NEXT:    adr x8, lsrc131; CHECK-NEXT:    ldr x9, lptr132; CHECK-NEXT:    ldrb w8, [x8]133; CHECK-NEXT:    strb w8, [x9]134; CHECK-NEXT:    ret135;136; CHECK-GLOBISEL-LABEL: bar3:137; CHECK-GLOBISEL:       // %bb.0: // %entry138; CHECK-GLOBISEL-NEXT:    adr x8, lsrc139; CHECK-GLOBISEL-NEXT:    adr x9, lptr140; CHECK-GLOBISEL-NEXT:    ldrb w8, [x8]141; CHECK-GLOBISEL-NEXT:    ldr x9, [x9]142; CHECK-GLOBISEL-NEXT:    strb w8, [x9]143; CHECK-GLOBISEL-NEXT:    ret144entry:145  %0 = load i8, ptr @lsrc, align 4146  %1 = load ptr, ptr @lptr, align 8147  store i8 %0, ptr %1, align 1148  ret void149}150 151 152@lbsrc = internal global [65536 x i8] zeroinitializer, align 4153@lbdst = internal global [65536 x i8] zeroinitializer, align 4154 155define dso_local void @baz1() {156; CHECK-LABEL: baz1:157; CHECK:       // %bb.0: // %entry158; CHECK-NEXT:    adr x8, lbsrc159; CHECK-NEXT:    adr x9, lbdst160; CHECK-NEXT:    ldrb w8, [x8]161; CHECK-NEXT:    strb w8, [x9]162; CHECK-NEXT:    ret163;164; CHECK-GLOBISEL-LABEL: baz1:165; CHECK-GLOBISEL:       // %bb.0: // %entry166; CHECK-GLOBISEL-NEXT:    adr x8, lbsrc167; CHECK-GLOBISEL-NEXT:    adr x9, lbdst168; CHECK-GLOBISEL-NEXT:    ldrb w8, [x8]169; CHECK-GLOBISEL-NEXT:    strb w8, [x9]170; CHECK-GLOBISEL-NEXT:    ret171entry:172  %0 = load i8, ptr @lbsrc, align 4173  store i8 %0, ptr @lbdst, align 4174  ret void175}176 177define dso_local void @baz2() {178; CHECK-LABEL: baz2:179; CHECK:       // %bb.0: // %entry180; CHECK-NEXT:    adr x8, lptr181; CHECK-NEXT:    adr x9, lbdst182; CHECK-NEXT:    str x9, [x8]183; CHECK-NEXT:    ret184;185; CHECK-GLOBISEL-LABEL: baz2:186; CHECK-GLOBISEL:       // %bb.0: // %entry187; CHECK-GLOBISEL-NEXT:    adr x8, lptr188; CHECK-GLOBISEL-NEXT:    adr x9, lbdst189; CHECK-GLOBISEL-NEXT:    str x9, [x8]190; CHECK-GLOBISEL-NEXT:    ret191entry:192  store ptr @lbdst, ptr @lptr, align 8193  ret void194}195 196define dso_local void @baz3() {197; FIXME: Needn't adr lptr198;199; CHECK-LABEL: baz3:200; CHECK:       // %bb.0: // %entry201; CHECK-NEXT:    adr x8, lbsrc202; CHECK-NEXT:    ldr x9, lptr203; CHECK-NEXT:    ldrb w8, [x8]204; CHECK-NEXT:    strb w8, [x9]205; CHECK-NEXT:    ret206;207; CHECK-GLOBISEL-LABEL: baz3:208; CHECK-GLOBISEL:       // %bb.0: // %entry209; CHECK-GLOBISEL-NEXT:    adr x8, lbsrc210; CHECK-GLOBISEL-NEXT:    adr x9, lptr211; CHECK-GLOBISEL-NEXT:    ldrb w8, [x8]212; CHECK-GLOBISEL-NEXT:    ldr x9, [x9]213; CHECK-GLOBISEL-NEXT:    strb w8, [x9]214; CHECK-GLOBISEL-NEXT:    ret215entry:216  %0 = load i8, ptr @lbsrc, align 4217  %1 = load ptr, ptr @lptr, align 8218  store i8 %0, ptr %1, align 1219  ret void220}221 222 223declare void @func(...)224 225define dso_local ptr @externfuncaddr() {226; CHECK-LABEL: externfuncaddr:227; CHECK:       // %bb.0: // %entry228; CHECK-NEXT:    ldr x0, :got:func229; CHECK-NEXT:    ret230;231; CHECK-GLOBISEL-LABEL: externfuncaddr:232; CHECK-GLOBISEL:       // %bb.0: // %entry233; CHECK-GLOBISEL-NEXT:    ldr x0, :got:func234; CHECK-GLOBISEL-NEXT:    ret235entry:236      ret ptr @func237}238 239define dso_local ptr @localfuncaddr() {240; CHECK-LABEL: localfuncaddr:241; CHECK:       // %bb.0: // %entry242; CHECK-NEXT:    adr x0, externfuncaddr243; CHECK-NEXT:    ret244;245; CHECK-GLOBISEL-LABEL: localfuncaddr:246; CHECK-GLOBISEL:       // %bb.0: // %entry247; CHECK-GLOBISEL-NEXT:    adr x0, externfuncaddr248; CHECK-GLOBISEL-NEXT:    ret249entry:250      ret ptr @externfuncaddr251}252