175 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; Make sure that a negative value for the compare-and-swap is zero extended3; from i8/i16 to i32 since it will be compared for equality.4; RUN: llc -mtriple=powerpc64le-linux-gnu -verify-machineinstrs < %s | FileCheck %s5; RUN: llc -mtriple=powerpc64le-linux-gnu -mcpu=pwr7 -verify-machineinstrs < %s | FileCheck %s --check-prefix=CHECK-P76 7@str = private unnamed_addr constant [46 x i8] c"FAILED: __atomic_compare_exchange_n() failed.\00"8@str.1 = private unnamed_addr constant [59 x i8] c"FAILED: __atomic_compare_exchange_n() set the wrong value.\00"9@str.2 = private unnamed_addr constant [7 x i8] c"PASSED\00"10 11define signext i32 @main() nounwind {12; CHECK-LABEL: main:13; CHECK: # %bb.0: # %L.entry14; CHECK-NEXT: mflr 015; CHECK-NEXT: stdu 1, -48(1)16; CHECK-NEXT: li 3, -3247717; CHECK-NEXT: std 0, 64(1)18; CHECK-NEXT: sth 3, 46(1)19; CHECK-NEXT: addi 3, 1, 4620; CHECK-NEXT: lharx 4, 0, 321; CHECK-NEXT: cmplwi 4, 3305922; CHECK-NEXT: bne- 0, .LBB0_423; CHECK-NEXT: # %bb.1: # %cmpxchg.fencedstore24; CHECK-NEXT: sync25; CHECK-NEXT: li 4, 23426; CHECK-NEXT: .LBB0_2: # %cmpxchg.trystore27; CHECK-NEXT: #28; CHECK-NEXT: sthcx. 4, 0, 329; CHECK-NEXT: beq+ 0, .LBB0_530; CHECK-NEXT: # %bb.3: # %cmpxchg.releasedload31; CHECK-NEXT: #32; CHECK-NEXT: lharx 5, 0, 333; CHECK-NEXT: cmplwi 5, 3305934; CHECK-NEXT: beq+ 0, .LBB0_235; CHECK-NEXT: .LBB0_4: # %cmpxchg.nostore36; CHECK-NEXT: lwsync37; CHECK-NEXT: crxor 20, 20, 2038; CHECK-NEXT: b .LBB0_639; CHECK-NEXT: .LBB0_5: # %cmpxchg.success40; CHECK-NEXT: lwsync41; CHECK-NEXT: creqv 20, 20, 2042; CHECK-NEXT: .LBB0_6: # %cmpxchg.end43; CHECK-NEXT: bc 4, 20, .LBB0_944; CHECK-NEXT: # %bb.7: # %L.B000045; CHECK-NEXT: lhz 3, 46(1)46; CHECK-NEXT: cmplwi 3, 23447; CHECK-NEXT: bne 0, .LBB0_1048; CHECK-NEXT: # %bb.8: # %L.B000149; CHECK-NEXT: addis 3, 2, .L_MergedGlobals@toc@ha50; CHECK-NEXT: addi 3, 3, .L_MergedGlobals@toc@l51; CHECK-NEXT: bl puts52; CHECK-NEXT: nop53; CHECK-NEXT: li 3, 054; CHECK-NEXT: b .LBB0_1255; CHECK-NEXT: .LBB0_9: # %L.B000356; CHECK-NEXT: addis 3, 2, .L_MergedGlobals@toc@ha57; CHECK-NEXT: addi 3, 3, .L_MergedGlobals@toc@l58; CHECK-NEXT: addi 3, 3, 1659; CHECK-NEXT: b .LBB0_1160; CHECK-NEXT: .LBB0_10: # %L.B000561; CHECK-NEXT: addis 3, 2, .L_MergedGlobals@toc@ha62; CHECK-NEXT: addi 3, 3, .L_MergedGlobals@toc@l63; CHECK-NEXT: addi 3, 3, 6464; CHECK-NEXT: .LBB0_11: # %L.B000365; CHECK-NEXT: bl puts66; CHECK-NEXT: nop67; CHECK-NEXT: li 3, 168; CHECK-NEXT: .LBB0_12: # %L.B000369; CHECK-NEXT: addi 1, 1, 4870; CHECK-NEXT: ld 0, 16(1)71; CHECK-NEXT: mtlr 072; CHECK-NEXT: blr73;74; CHECK-P7-LABEL: main:75; CHECK-P7: # %bb.0: # %L.entry76; CHECK-P7-NEXT: mflr 077; CHECK-P7-NEXT: stdu 1, -48(1)78; CHECK-P7-NEXT: li 3, -3247779; CHECK-P7-NEXT: addi 4, 1, 4680; CHECK-P7-NEXT: std 0, 64(1)81; CHECK-P7-NEXT: sth 3, 46(1)82; CHECK-P7-NEXT: rldicr 3, 4, 0, 6183; CHECK-P7-NEXT: rlwinm 4, 4, 3, 27, 2784; CHECK-P7-NEXT: lwarx 5, 0, 385; CHECK-P7-NEXT: srw 6, 5, 486; CHECK-P7-NEXT: clrlwi 6, 6, 1687; CHECK-P7-NEXT: cmplwi 6, 3305988; CHECK-P7-NEXT: bne- 0, .LBB0_489; CHECK-P7-NEXT: # %bb.1: # %cmpxchg.fencedstore90; CHECK-P7-NEXT: lis 6, 091; CHECK-P7-NEXT: li 7, 23492; CHECK-P7-NEXT: sync93; CHECK-P7-NEXT: ori 6, 6, 6553594; CHECK-P7-NEXT: slw 7, 7, 495; CHECK-P7-NEXT: slw 6, 6, 496; CHECK-P7-NEXT: not 6, 697; CHECK-P7-NEXT: .LBB0_2: # %cmpxchg.trystore98; CHECK-P7-NEXT: #99; CHECK-P7-NEXT: and 5, 5, 6100; CHECK-P7-NEXT: or 5, 5, 7101; CHECK-P7-NEXT: stwcx. 5, 0, 3102; CHECK-P7-NEXT: beq+ 0, .LBB0_5103; CHECK-P7-NEXT: # %bb.3: # %cmpxchg.releasedload104; CHECK-P7-NEXT: #105; CHECK-P7-NEXT: lwarx 5, 0, 3106; CHECK-P7-NEXT: srw 8, 5, 4107; CHECK-P7-NEXT: clrlwi 8, 8, 16108; CHECK-P7-NEXT: cmplwi 8, 33059109; CHECK-P7-NEXT: beq+ 0, .LBB0_2110; CHECK-P7-NEXT: .LBB0_4: # %cmpxchg.nostore111; CHECK-P7-NEXT: crxor 20, 20, 20112; CHECK-P7-NEXT: lwsync113; CHECK-P7-NEXT: b .LBB0_6114; CHECK-P7-NEXT: .LBB0_5: # %cmpxchg.success115; CHECK-P7-NEXT: lwsync116; CHECK-P7-NEXT: creqv 20, 20, 20117; CHECK-P7-NEXT: .LBB0_6: # %cmpxchg.end118; CHECK-P7-NEXT: bc 4, 20, .LBB0_9119; CHECK-P7-NEXT: # %bb.7: # %L.B0000120; CHECK-P7-NEXT: lhz 3, 46(1)121; CHECK-P7-NEXT: cmplwi 3, 234122; CHECK-P7-NEXT: bne 0, .LBB0_10123; CHECK-P7-NEXT: # %bb.8: # %L.B0001124; CHECK-P7-NEXT: addis 3, 2, .L_MergedGlobals@toc@ha125; CHECK-P7-NEXT: addi 3, 3, .L_MergedGlobals@toc@l126; CHECK-P7-NEXT: bl puts127; CHECK-P7-NEXT: nop128; CHECK-P7-NEXT: li 3, 0129; CHECK-P7-NEXT: b .LBB0_12130; CHECK-P7-NEXT: .LBB0_9: # %L.B0003131; CHECK-P7-NEXT: addis 3, 2, .L_MergedGlobals@toc@ha132; CHECK-P7-NEXT: addi 3, 3, .L_MergedGlobals@toc@l133; CHECK-P7-NEXT: addi 3, 3, 16134; CHECK-P7-NEXT: b .LBB0_11135; CHECK-P7-NEXT: .LBB0_10: # %L.B0005136; CHECK-P7-NEXT: addis 3, 2, .L_MergedGlobals@toc@ha137; CHECK-P7-NEXT: addi 3, 3, .L_MergedGlobals@toc@l138; CHECK-P7-NEXT: addi 3, 3, 64139; CHECK-P7-NEXT: .LBB0_11: # %L.B0003140; CHECK-P7-NEXT: bl puts141; CHECK-P7-NEXT: nop142; CHECK-P7-NEXT: li 3, 1143; CHECK-P7-NEXT: .LBB0_12: # %L.B0003144; CHECK-P7-NEXT: addi 1, 1, 48145; CHECK-P7-NEXT: ld 0, 16(1)146; CHECK-P7-NEXT: mtlr 0147; CHECK-P7-NEXT: blr148L.entry:149 %value.addr = alloca i16, align 2150 store i16 -32477, ptr %value.addr, align 2151 %0 = cmpxchg ptr %value.addr, i16 -32477, i16 234 seq_cst seq_cst152 %1 = extractvalue { i16, i1 } %0, 1153 br i1 %1, label %L.B0000, label %L.B0003154 155L.B0003: ; preds = %L.entry156 %puts = call i32 @puts(ptr @str)157 ret i32 1158 159L.B0000: ; preds = %L.entry160 %2 = load i16, ptr %value.addr, align 2161 %3 = icmp eq i16 %2, 234162 br i1 %3, label %L.B0001, label %L.B0005163 164L.B0005: ; preds = %L.B0000165 %puts1 = call i32 @puts(ptr @str.1)166 ret i32 1167 168L.B0001: ; preds = %L.B0000169 %puts2 = call i32 @puts(ptr @str.2)170 ret i32 0171}172 173; Function Attrs: nounwind174declare i32 @puts(ptr nocapture readonly) #0175