1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \ 3; RUN: -mcpu=pwr8 < %s | FileCheck %s 4; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \ 5; RUN: -mcpu=pwr7 < %s | FileCheck %s 6; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-aix \ 7; RUN: -mcpu=pwr7 < %s | FileCheck %s 8; RUN: llc -verify-machineinstrs -mtriple=powerpc-unknown-aix \ 9; RUN: -mcpu=pwr7 < %s | FileCheck %s --check-prefix=CHECK-32BIT 10 11declare i32 @llvm.ppc.mftbu() 12declare i32 @llvm.ppc.mfmsr() 13declare void @llvm.ppc.mtmsr(i32) 14 15@ula = external local_unnamed_addr global i64, align 8 16 17define dso_local zeroext i32 @test_mftbu() { 18; CHECK-LABEL: test_mftbu: 19; CHECK: # %bb.0: # %entry 20; CHECK-NEXT: mftbu 3 21; CHECK-NEXT: clrldi 3, 3, 32 22; CHECK-NEXT: blr 23; 24; CHECK-32BIT-LABEL: test_mftbu: 25; CHECK-32BIT: # %bb.0: # %entry 26; CHECK-32BIT-NEXT: mftbu 3 27; CHECK-32BIT-NEXT: blr 28entry: 29 %0 = tail call i32 @llvm.ppc.mftbu() 30 ret i32 %0 31} 32 33define dso_local i64 @test_mfmsr() { 34; CHECK-LABEL: test_mfmsr: 35; CHECK: # %bb.0: # %entry 36; CHECK-NEXT: mfmsr 3 37; CHECK-NEXT: clrldi 3, 3, 32 38; CHECK-NEXT: blr 39; 40; CHECK-32BIT-LABEL: test_mfmsr: 41; CHECK-32BIT: # %bb.0: # %entry 42; CHECK-32BIT-NEXT: mfmsr 4 43; CHECK-32BIT-NEXT: li 3, 0 44; CHECK-32BIT-NEXT: blr 45entry: 46 %0 = tail call i32 @llvm.ppc.mfmsr() 47 %conv = zext i32 %0 to i64 48 ret i64 %conv 49} 50 51define dso_local void @test_mtmsr() { 52; CHECK-LABEL: test_mtmsr: 53; CHECK: mtmsr 3 54; CHECK-NEXT: blr 55; 56; CHECK-32BIT-LABEL: test_mtmsr: 57; CHECK-32BIT: # %bb.0: # %entry 58; CHECK-32BIT-NEXT: lwz 3, L..C0(2) # @ula 59; CHECK-32BIT-NEXT: lwz 3, 4(3) 60; CHECK-32BIT-NEXT: mtmsr 3, 0 61; CHECK-32BIT-NEXT: blr 62entry: 63 %0 = load i64, i64* @ula, align 8 64 %conv = trunc i64 %0 to i32 65 call void @llvm.ppc.mtmsr(i32 %conv) 66 ret void 67} 68