193 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \3; RUN: -mcpu=pwr8 < %s | FileCheck %s4; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \5; RUN: -mcpu=pwr7 < %s | FileCheck %s6; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-aix \7; RUN: -mcpu=pwr7 < %s | FileCheck %s --check-prefix=CHECK-AIX648 9declare i64 @llvm.ppc.mfspr.i64(i32 immarg)10declare void @llvm.ppc.mtspr.i64(i32 immarg, i64)11 12@ula = external local_unnamed_addr global i64, align 813 14define dso_local i64 @test_mfxer() {15; CHECK-LABEL: test_mfxer:16; CHECK: # %bb.0: # %entry17; CHECK-NEXT: mfxer 318; CHECK-NEXT: blr19;20; CHECK-AIX64-LABEL: test_mfxer:21; CHECK-AIX64: # %bb.0: # %entry22; CHECK-AIX64-NEXT: mfxer 323; CHECK-AIX64-NEXT: blr24entry:25 %0 = call i64 @llvm.ppc.mfspr.i64(i32 1)26 ret i64 %027}28 29define dso_local i64 @test_mflr() {30; CHECK-LABEL: test_mflr:31; CHECK: # %bb.0: # %entry32; CHECK-NEXT: mflr 333; CHECK-NEXT: blr34;35; CHECK-AIX64-LABEL: test_mflr:36; CHECK-AIX64: # %bb.0: # %entry37; CHECK-AIX64-NEXT: mfspr 3, 838; CHECK-AIX64-NEXT: blr39entry:40 %0 = call i64 @llvm.ppc.mfspr.i64(i32 8)41 ret i64 %042}43 44define dso_local i64 @test_mfctr() {45; CHECK-LABEL: test_mfctr:46; CHECK: # %bb.0: # %entry47; CHECK-NEXT: mfctr 348; CHECK-NEXT: blr49;50; CHECK-AIX64-LABEL: test_mfctr:51; CHECK-AIX64: # %bb.0: # %entry52; CHECK-AIX64-NEXT: mfspr 3, 953; CHECK-AIX64-NEXT: blr54entry:55 %0 = call i64 @llvm.ppc.mfspr.i64(i32 9)56 ret i64 %057}58 59define dso_local i64 @test_mfppr() {60; CHECK-LABEL: test_mfppr:61; CHECK: # %bb.0: # %entry62; CHECK-NEXT: mfspr 3, 89663; CHECK-NEXT: blr64;65; CHECK-AIX64-LABEL: test_mfppr:66; CHECK-AIX64: # %bb.0: # %entry67; CHECK-AIX64-NEXT: mfspr 3, 89668; CHECK-AIX64-NEXT: blr69entry:70 %0 = call i64 @llvm.ppc.mfspr.i64(i32 896)71 ret i64 %072}73 74define dso_local i64 @test_mfppr32() {75; CHECK-LABEL: test_mfppr32:76; CHECK: # %bb.0: # %entry77; CHECK-NEXT: mfspr 3, 89878; CHECK-NEXT: blr79;80; CHECK-AIX64-LABEL: test_mfppr32:81; CHECK-AIX64: # %bb.0: # %entry82; CHECK-AIX64-NEXT: mfspr 3, 89883; CHECK-AIX64-NEXT: blr84entry:85 %0 = call i64 @llvm.ppc.mfspr.i64(i32 898)86 ret i64 %087}88 89define dso_local void @test_mtxer() {90; CHECK-LABEL: test_mtxer:91; CHECK: # %bb.0: # %entry92; CHECK-NEXT: addis 3, 2, .LC0@toc@ha93; CHECK-NEXT: ld 3, .LC0@toc@l(3)94; CHECK-NEXT: ld 3, 0(3)95; CHECK-NEXT: mtxer 396; CHECK-NEXT: blr97;98; CHECK-AIX64-LABEL: test_mtxer:99; CHECK-AIX64: # %bb.0: # %entry100; CHECK-AIX64-NEXT: ld 3, L..C0(2) # @ula101; CHECK-AIX64-NEXT: ld 3, 0(3)102; CHECK-AIX64-NEXT: mtxer 3103; CHECK-AIX64-NEXT: blr104entry:105 %0 = load i64, ptr @ula, align 8106 tail call void @llvm.ppc.mtspr.i64(i32 1, i64 %0)107 ret void108}109 110define dso_local void @test_mtlr() {111; CHECK-LABEL: test_mtlr:112; CHECK: # %bb.0: # %entry113; CHECK-NEXT: addis 3, 2, .LC0@toc@ha114; CHECK-NEXT: ld 3, .LC0@toc@l(3)115; CHECK-NEXT: ld 3, 0(3)116; CHECK-NEXT: mtlr 3117; CHECK-NEXT: blr118;119; CHECK-AIX64-LABEL: test_mtlr:120; CHECK-AIX64: # %bb.0: # %entry121; CHECK-AIX64-NEXT: ld 3, L..C0(2) # @ula122; CHECK-AIX64-NEXT: ld 3, 0(3)123; CHECK-AIX64-NEXT: mtspr 8, 3124; CHECK-AIX64-NEXT: blr125entry:126 %0 = load i64, ptr @ula, align 8127 tail call void @llvm.ppc.mtspr.i64(i32 8, i64 %0)128 ret void129}130 131define dso_local void @test_mtctr() {132; CHECK-LABEL: test_mtctr:133; CHECK: # %bb.0: # %entry134; CHECK-NEXT: addis 3, 2, .LC0@toc@ha135; CHECK-NEXT: ld 3, .LC0@toc@l(3)136; CHECK-NEXT: ld 3, 0(3)137; CHECK-NEXT: mtctr 3138; CHECK-NEXT: blr139;140; CHECK-AIX64-LABEL: test_mtctr:141; CHECK-AIX64: # %bb.0: # %entry142; CHECK-AIX64-NEXT: ld 3, L..C0(2) # @ula143; CHECK-AIX64-NEXT: ld 3, 0(3)144; CHECK-AIX64-NEXT: mtspr 9, 3145; CHECK-AIX64-NEXT: blr146entry:147 %0 = load i64, ptr @ula, align 8148 tail call void @llvm.ppc.mtspr.i64(i32 9, i64 %0)149 ret void150}151 152define dso_local void @test_mtppr() {153; CHECK-LABEL: test_mtppr:154; CHECK: # %bb.0: # %entry155; CHECK-NEXT: addis 3, 2, .LC0@toc@ha156; CHECK-NEXT: ld 3, .LC0@toc@l(3)157; CHECK-NEXT: ld 3, 0(3)158; CHECK-NEXT: mtspr 896, 3159; CHECK-NEXT: blr160;161; CHECK-AIX64-LABEL: test_mtppr:162; CHECK-AIX64: # %bb.0: # %entry163; CHECK-AIX64-NEXT: ld 3, L..C0(2) # @ula164; CHECK-AIX64-NEXT: ld 3, 0(3)165; CHECK-AIX64-NEXT: mtspr 896, 3166; CHECK-AIX64-NEXT: blr167entry:168 %0 = load i64, ptr @ula, align 8169 tail call void @llvm.ppc.mtspr.i64(i32 896, i64 %0)170 ret void171}172 173define dso_local void @test_mtppr32() {174; CHECK-LABEL: test_mtppr32:175; CHECK: # %bb.0: # %entry176; CHECK-NEXT: addis 3, 2, .LC0@toc@ha177; CHECK-NEXT: ld 3, .LC0@toc@l(3)178; CHECK-NEXT: ld 3, 0(3)179; CHECK-NEXT: mtspr 898, 3180; CHECK-NEXT: blr181;182; CHECK-AIX64-LABEL: test_mtppr32:183; CHECK-AIX64: # %bb.0: # %entry184; CHECK-AIX64-NEXT: ld 3, L..C0(2) # @ula185; CHECK-AIX64-NEXT: ld 3, 0(3)186; CHECK-AIX64-NEXT: mtspr 898, 3187; CHECK-AIX64-NEXT: blr188entry:189 %0 = load i64, ptr @ula, align 8190 tail call void @llvm.ppc.mtspr.i64(i32 898, i64 %0)191 ret void192}193