brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.4 KiB · d59f282 Raw
108 lines · plain
1; RUN: llc -mtriple=thumbv7s-apple-ios7.0 -o - %s | FileCheck %s2 3define i32 @test_return(ptr %p, i32 %oldval, i32 %newval) {4; CHECK-LABEL: test_return:5 6; CHECK: ldrex [[LOADED:r[0-9]+]], [r0]7; CHECK: cmp [[LOADED]], r1 8; CHECK: bne [[FAILED:LBB[0-9]+_[0-9]+]]9 10; CHECK: dmb ishst11 12; CHECK: [[LOOP:LBB[0-9]+_[0-9]+]]:13; CHECK: strex [[STATUS:r[0-9]+]], {{r[0-9]+}}, [r0]14; CHECK: cmp r3, #015 16; CHECK: ldrex [[LOADED]], [r0]17; CHECK: cmp [[LOADED]], r118; CHECK: beq [[LOOP]]19 20; CHECK: [[FAILED]]:21; CHECK-NOT: cmp {{r[0-9]+}}, {{r[0-9]+}}22; CHECK: clrex23; CHECK: movs r0, #024; CHECK: dmb ish25; CHECK: bx lr26 27  %pair = cmpxchg ptr %p, i32 %oldval, i32 %newval seq_cst seq_cst28  %success = extractvalue { i32, i1 } %pair, 129  %conv = zext i1 %success to i3230  ret i32 %conv31}32 33define i1 @test_return_bool(ptr %value, i8 %oldValue, i8 %newValue) {34; CHECK-LABEL: test_return_bool:35 36; CHECK: uxtb [[OLDBYTE:r[0-9]+]], r137 38; CHECK: ldrexb [[LOADED:r[0-9]+]], [r0]39; CHECK: cmp [[LOADED]], [[OLDBYTE]]40; CHECK: bne [[FAIL:LBB[0-9]+_[0-9]+]]41 42; CHECK: dmb ishst43 44; CHECK: [[LOOP:LBB[0-9]+_[0-9]+]]:45; CHECK: strexb [[STATUS:r[0-9]+]], {{r[0-9]+}}, [r0]46; CHECK: cmp [[STATUS]], #047 48; CHECK: ldrexb [[LOADED]], [r0]49; CHECK: cmp [[LOADED]], [[OLDBYTE]]50; CHECK: beq [[LOOP]]51 52 53  ; FIXME: this eor is redundant. Need to teach DAG combine that.54; CHECK: [[FAIL]]:55; CHECK: clrex56; CHECK: movs [[TMP:r[0-9]+]], #057; CHECK: eor r0, [[TMP]], #158; CHECK: bx lr59 60 61  %pair = cmpxchg ptr %value, i8 %oldValue, i8 %newValue acq_rel monotonic62  %success = extractvalue { i8, i1 } %pair, 163  %failure = xor i1 %success, 164  ret i1 %failure65}66 67define void @test_conditional(ptr %p, i32 %oldval, i32 %newval) {68; CHECK-LABEL: test_conditional:69 70; CHECK: ldrex [[LOADED:r[0-9]+]], [r0]71; CHECK: cmp [[LOADED]], r172; CHECK: bne [[FAILED:LBB[0-9]+_[0-9]+]]73 74; CHECK: dmb ishst75 76; CHECK: [[LOOP:LBB[0-9]+_[0-9]+]]:77; CHECK: strex [[STATUS:r[0-9]+]], r2, [r0]78; CHECK: cmp [[STATUS]], #0 79 80; CHECK: ldrex [[LOADED]], [r0]81; CHECK: cmp [[LOADED]], r182; CHECK: beq [[LOOP]]83 84; CHECK: [[FAILED]]:85; CHECK-NOT: cmp {{r[0-9]+}}, {{r[0-9]+}}86; CHECK: clrex87; CHECK: dmb ish88; CHECK: b.w _baz89 90  %pair = cmpxchg ptr %p, i32 %oldval, i32 %newval seq_cst seq_cst91  %success = extractvalue { i32, i1 } %pair, 192  br i1 %success, label %true, label %false93 94true:95  tail call void @bar() #296  br label %end97 98false:99  tail call void @baz() #2100  br label %end101 102end:103  ret void104}105 106declare void @bar()107declare void @baz()108