142 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 %s --check-prefix=CHECK-644; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \5; RUN: -mcpu=pwr8 < %s | FileCheck %s --check-prefix=CHECK-646; RUN: llc -verify-machineinstrs -mtriple=powerpc-unknown-aix \7; RUN: -mcpu=pwr8 < %s | FileCheck %s --check-prefix=CHECK-328; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-aix \9; RUN: -mcpu=pwr8 < %s | FileCheck %s --check-prefix=CHECK-6410 11declare i32 @llvm.ppc.lwarx(ptr)12define dso_local signext i32 @test_lwarx(ptr readnone %a) {13; CHECK-64-LABEL: test_lwarx:14; CHECK-64: # %bb.0: # %entry15; CHECK-64-NEXT: #APP16; CHECK-64-NEXT: lwarx 3, 0, 317; CHECK-64-NEXT: #NO_APP18; CHECK-64-NEXT: extsw 3, 319; CHECK-64-NEXT: blr20;21; CHECK-32-LABEL: test_lwarx:22; CHECK-32: # %bb.0: # %entry23; CHECK-32-NEXT: #APP24; CHECK-32-NEXT: lwarx 3, 0, 325; CHECK-32-NEXT: #NO_APP26; CHECK-32-NEXT: blr27entry:28 %0 = call i32 asm sideeffect "lwarx $0, ${1:y}", "=r,*Z,~{memory}"(ptr elementtype(i32) %a)29 ret i32 %030}31 32declare i32 @llvm.ppc.stwcx(ptr, i32)33define dso_local signext i32 @test_stwcx(ptr %a, i32 signext %b) {34; CHECK-64-LABEL: test_stwcx:35; CHECK-64: # %bb.0: # %entry36; CHECK-64-NEXT: stwcx. 4, 0, 337; CHECK-64-NEXT: mfocrf 3, 12838; CHECK-64-NEXT: srwi 3, 3, 2839; CHECK-64-NEXT: rlwinm 3, 3, 31, 31, 3140; CHECK-64-NEXT: blr41;42; CHECK-32-LABEL: test_stwcx:43; CHECK-32: # %bb.0: # %entry44; CHECK-32-NEXT: stwcx. 4, 0, 345; CHECK-32-NEXT: mfocrf 3, 12846; CHECK-32-NEXT: srwi 3, 3, 2847; CHECK-32-NEXT: rlwinm 3, 3, 31, 31, 3148; CHECK-32-NEXT: blr49entry:50 %0 = tail call i32 @llvm.ppc.stwcx(ptr %a, i32 %b)51 ret i32 %052}53 54declare i32 @llvm.ppc.sthcx(ptr, i32)55define dso_local signext i32 @test_sthcx(ptr %a, i16 signext %val) {56; CHECK-64-LABEL: test_sthcx:57; CHECK-64: # %bb.0: # %entry58; CHECK-64-NEXT: sthcx. 4, 0, 359; CHECK-64-NEXT: mfocrf 3, 12860; CHECK-64-NEXT: srwi 3, 3, 2861; CHECK-64-NEXT: rlwinm 3, 3, 31, 31, 3162; CHECK-64-NEXT: blr63;64; CHECK-32-LABEL: test_sthcx:65; CHECK-32: # %bb.0: # %entry66; CHECK-32-NEXT: sthcx. 4, 0, 367; CHECK-32-NEXT: mfocrf 3, 12868; CHECK-32-NEXT: srwi 3, 3, 2869; CHECK-32-NEXT: rlwinm 3, 3, 31, 31, 3170; CHECK-32-NEXT: blr71entry:72 %0 = sext i16 %val to i3273 %1 = tail call i32 @llvm.ppc.sthcx(ptr %a, i32 %0)74 ret i32 %175}76 77declare i32 @llvm.ppc.stbcx(ptr, i32)78define signext i32 @test_stbcx(ptr %addr, i8 signext %val) {79; CHECK-64-LABEL: test_stbcx:80; CHECK-64: # %bb.0: # %entry81; CHECK-64-NEXT: stbcx. 4, 0, 382; CHECK-64-NEXT: mfocrf 3, 12883; CHECK-64-NEXT: srwi 3, 3, 2884; CHECK-64-NEXT: rlwinm 3, 3, 31, 31, 3185; CHECK-64-NEXT: blr86;87; CHECK-32-LABEL: test_stbcx:88; CHECK-32: # %bb.0: # %entry89; CHECK-32-NEXT: stbcx. 4, 0, 390; CHECK-32-NEXT: mfocrf 3, 12891; CHECK-32-NEXT: srwi 3, 3, 2892; CHECK-32-NEXT: rlwinm 3, 3, 31, 31, 3193; CHECK-32-NEXT: blr94entry:95 %conv = sext i8 %val to i3296 %0 = tail call i32 @llvm.ppc.stbcx(ptr %addr, i32 %conv)97 ret i32 %098}99 100define dso_local signext i16 @test_lharx(ptr %a) {101; CHECK-64-LABEL: test_lharx:102; CHECK-64: # %bb.0: # %entry103; CHECK-64-NEXT: #APP104; CHECK-64-NEXT: lharx 3, 0, 3105; CHECK-64-NEXT: #NO_APP106; CHECK-64-NEXT: extsh 3, 3107; CHECK-64-NEXT: blr108;109; CHECK-32-LABEL: test_lharx:110; CHECK-32: # %bb.0: # %entry111; CHECK-32-NEXT: #APP112; CHECK-32-NEXT: lharx 3, 0, 3113; CHECK-32-NEXT: #NO_APP114; CHECK-32-NEXT: extsh 3, 3115; CHECK-32-NEXT: blr116entry:117 %0 = tail call i16 asm sideeffect "lharx $0, ${1:y}", "=r,*Z,~{memory}"(ptr elementtype(i16) %a)118 ret i16 %0119}120 121; Function Attrs: nounwind uwtable122define dso_local zeroext i8 @test_lbarx(ptr %a) {123; CHECK-64-LABEL: test_lbarx:124; CHECK-64: # %bb.0: # %entry125; CHECK-64-NEXT: #APP126; CHECK-64-NEXT: lbarx 3, 0, 3127; CHECK-64-NEXT: #NO_APP128; CHECK-64-NEXT: clrldi 3, 3, 56129; CHECK-64-NEXT: blr130;131; CHECK-32-LABEL: test_lbarx:132; CHECK-32: # %bb.0: # %entry133; CHECK-32-NEXT: #APP134; CHECK-32-NEXT: lbarx 3, 0, 3135; CHECK-32-NEXT: #NO_APP136; CHECK-32-NEXT: clrlwi 3, 3, 24137; CHECK-32-NEXT: blr138entry:139 %0 = tail call i8 asm sideeffect "lbarx $0, ${1:y}", "=r,*Z,~{memory}"(ptr elementtype(i8) %a)140 ret i8 %0141}142