210 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=CHECK4; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-aix \5; RUN: -mcpu=pwr8 < %s | FileCheck %s --check-prefix=CHECK-AIX6 7define dso_local zeroext i8 @test1(ptr noundef %addr, i8 noundef zeroext %newval) local_unnamed_addr #0 {8; CHECK-LABEL: test1:9; CHECK: # %bb.0: # %entry10; CHECK-NEXT: stbcx. 4, 0, 311; CHECK-NEXT: bne 0, .LBB0_212; CHECK-NEXT: # %bb.1: # %if.then13; CHECK-NEXT: mflr 014; CHECK-NEXT: stdu 1, -32(1)15; CHECK-NEXT: std 0, 48(1)16; CHECK-NEXT: .cfi_def_cfa_offset 3217; CHECK-NEXT: .cfi_offset lr, 1618; CHECK-NEXT: bl dummy19; CHECK-NEXT: nop20; CHECK-NEXT: addi 1, 1, 3221; CHECK-NEXT: ld 0, 16(1)22; CHECK-NEXT: mtlr 023; CHECK-NEXT: .LBB0_2: # %if.end24; CHECK-NEXT: li 3, 5525; CHECK-NEXT: blr26;27; CHECK-AIX-LABEL: test1:28; CHECK-AIX: # %bb.0: # %entry29; CHECK-AIX-NEXT: stbcx. 4, 0, 330; CHECK-AIX-NEXT: bne 0, L..BB0_231; CHECK-AIX-NEXT: # %bb.1: # %if.then32; CHECK-AIX-NEXT: mflr 033; CHECK-AIX-NEXT: stdu 1, -112(1)34; CHECK-AIX-NEXT: std 0, 128(1)35; CHECK-AIX-NEXT: bl .dummy[PR]36; CHECK-AIX-NEXT: nop37; CHECK-AIX-NEXT: addi 1, 1, 11238; CHECK-AIX-NEXT: ld 0, 16(1)39; CHECK-AIX-NEXT: mtlr 040; CHECK-AIX-NEXT: L..BB0_2: # %if.end41; CHECK-AIX-NEXT: li 3, 5542; CHECK-AIX-NEXT: blr43entry:44 %conv = zext i8 %newval to i3245 %0 = tail call i32 @llvm.ppc.stbcx(ptr %addr, i32 %conv)46 %tobool.not = icmp eq i32 %0, 047 br i1 %tobool.not, label %if.end, label %if.then48 49if.then: ; preds = %entry50 tail call void @dummy() #351 br label %if.end52 53if.end: ; preds = %if.then, %entry54 ret i8 5555}56 57define dso_local signext i16 @test2(ptr noundef %addr, i16 noundef signext %newval) local_unnamed_addr #0 {58; CHECK-LABEL: test2:59; CHECK: # %bb.0: # %entry60; CHECK-NEXT: sthcx. 4, 0, 361; CHECK-NEXT: bne 0, .LBB1_262; CHECK-NEXT: # %bb.1: # %if.then63; CHECK-NEXT: mflr 064; CHECK-NEXT: stdu 1, -32(1)65; CHECK-NEXT: std 0, 48(1)66; CHECK-NEXT: .cfi_def_cfa_offset 3267; CHECK-NEXT: .cfi_offset lr, 1668; CHECK-NEXT: bl dummy69; CHECK-NEXT: nop70; CHECK-NEXT: addi 1, 1, 3271; CHECK-NEXT: ld 0, 16(1)72; CHECK-NEXT: mtlr 073; CHECK-NEXT: .LBB1_2: # %if.end74; CHECK-NEXT: li 3, 5575; CHECK-NEXT: blr76;77; CHECK-AIX-LABEL: test2:78; CHECK-AIX: # %bb.0: # %entry79; CHECK-AIX-NEXT: sthcx. 4, 0, 380; CHECK-AIX-NEXT: bne 0, L..BB1_281; CHECK-AIX-NEXT: # %bb.1: # %if.then82; CHECK-AIX-NEXT: mflr 083; CHECK-AIX-NEXT: stdu 1, -112(1)84; CHECK-AIX-NEXT: std 0, 128(1)85; CHECK-AIX-NEXT: bl .dummy[PR]86; CHECK-AIX-NEXT: nop87; CHECK-AIX-NEXT: addi 1, 1, 11288; CHECK-AIX-NEXT: ld 0, 16(1)89; CHECK-AIX-NEXT: mtlr 090; CHECK-AIX-NEXT: L..BB1_2: # %if.end91; CHECK-AIX-NEXT: li 3, 5592; CHECK-AIX-NEXT: blr93entry:94 %0 = sext i16 %newval to i3295 %1 = tail call i32 @llvm.ppc.sthcx(ptr %addr, i32 %0)96 %tobool.not = icmp eq i32 %1, 097 br i1 %tobool.not, label %if.end, label %if.then98 99if.then: ; preds = %entry100 tail call void @dummy() #3101 br label %if.end102 103if.end: ; preds = %if.then, %entry104 ret i16 55105}106 107define dso_local signext i32 @test3(ptr noundef %addr, i32 noundef signext %newval) local_unnamed_addr #0 {108; CHECK-LABEL: test3:109; CHECK: # %bb.0: # %entry110; CHECK-NEXT: stwcx. 4, 0, 3111; CHECK-NEXT: bne 0, .LBB2_2112; CHECK-NEXT: # %bb.1: # %if.then113; CHECK-NEXT: mflr 0114; CHECK-NEXT: stdu 1, -32(1)115; CHECK-NEXT: std 0, 48(1)116; CHECK-NEXT: .cfi_def_cfa_offset 32117; CHECK-NEXT: .cfi_offset lr, 16118; CHECK-NEXT: bl dummy119; CHECK-NEXT: nop120; CHECK-NEXT: addi 1, 1, 32121; CHECK-NEXT: ld 0, 16(1)122; CHECK-NEXT: mtlr 0123; CHECK-NEXT: .LBB2_2: # %if.end124; CHECK-NEXT: li 3, 55125; CHECK-NEXT: blr126;127; CHECK-AIX-LABEL: test3:128; CHECK-AIX: # %bb.0: # %entry129; CHECK-AIX-NEXT: stwcx. 4, 0, 3130; CHECK-AIX-NEXT: bne 0, L..BB2_2131; CHECK-AIX-NEXT: # %bb.1: # %if.then132; CHECK-AIX-NEXT: mflr 0133; CHECK-AIX-NEXT: stdu 1, -112(1)134; CHECK-AIX-NEXT: std 0, 128(1)135; CHECK-AIX-NEXT: bl .dummy[PR]136; CHECK-AIX-NEXT: nop137; CHECK-AIX-NEXT: addi 1, 1, 112138; CHECK-AIX-NEXT: ld 0, 16(1)139; CHECK-AIX-NEXT: mtlr 0140; CHECK-AIX-NEXT: L..BB2_2: # %if.end141; CHECK-AIX-NEXT: li 3, 55142; CHECK-AIX-NEXT: blr143entry:144 %0 = tail call i32 @llvm.ppc.stwcx(ptr %addr, i32 %newval)145 %tobool.not = icmp eq i32 %0, 0146 br i1 %tobool.not, label %if.end, label %if.then147 148if.then: ; preds = %entry149 tail call void @dummy() #3150 br label %if.end151 152if.end: ; preds = %if.then, %entry153 ret i32 55154}155 156define dso_local i64 @test4(ptr noundef %addr, i64 noundef %newval) local_unnamed_addr #0 {157; CHECK-LABEL: test4:158; CHECK: # %bb.0: # %entry159; CHECK-NEXT: stdcx. 4, 0, 3160; CHECK-NEXT: bne 0, .LBB3_2161; CHECK-NEXT: # %bb.1: # %if.then162; CHECK-NEXT: mflr 0163; CHECK-NEXT: stdu 1, -32(1)164; CHECK-NEXT: std 0, 48(1)165; CHECK-NEXT: .cfi_def_cfa_offset 32166; CHECK-NEXT: .cfi_offset lr, 16167; CHECK-NEXT: bl dummy168; CHECK-NEXT: nop169; CHECK-NEXT: addi 1, 1, 32170; CHECK-NEXT: ld 0, 16(1)171; CHECK-NEXT: mtlr 0172; CHECK-NEXT: .LBB3_2: # %if.end173; CHECK-NEXT: li 3, 55174; CHECK-NEXT: blr175;176; CHECK-AIX-LABEL: test4:177; CHECK-AIX: # %bb.0: # %entry178; CHECK-AIX-NEXT: stdcx. 4, 0, 3179; CHECK-AIX-NEXT: bne 0, L..BB3_2180; CHECK-AIX-NEXT: # %bb.1: # %if.then181; CHECK-AIX-NEXT: mflr 0182; CHECK-AIX-NEXT: stdu 1, -112(1)183; CHECK-AIX-NEXT: std 0, 128(1)184; CHECK-AIX-NEXT: bl .dummy[PR]185; CHECK-AIX-NEXT: nop186; CHECK-AIX-NEXT: addi 1, 1, 112187; CHECK-AIX-NEXT: ld 0, 16(1)188; CHECK-AIX-NEXT: mtlr 0189; CHECK-AIX-NEXT: L..BB3_2: # %if.end190; CHECK-AIX-NEXT: li 3, 55191; CHECK-AIX-NEXT: blr192entry:193 %0 = tail call i32 @llvm.ppc.stdcx(ptr %addr, i64 %newval)194 %tobool.not = icmp eq i32 %0, 0195 br i1 %tobool.not, label %if.end, label %if.then196 197if.then: ; preds = %entry198 tail call void @dummy() #3199 br label %if.end200 201if.end: ; preds = %if.then, %entry202 ret i64 55203}204 205declare i32 @llvm.ppc.stbcx(ptr, i32) #1206declare i32 @llvm.ppc.sthcx(ptr, i32) #1207declare i32 @llvm.ppc.stwcx(ptr, i32) #1208declare i32 @llvm.ppc.stdcx(ptr, i64) #1209declare void @dummy(...) local_unnamed_addr #2210