219 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-apple-macosx | FileCheck %s3 4define i32 @test_01(ptr %p, i64 %len, i32 %x) {5; CHECK-LABEL: test_01:6; CHECK: ## %bb.0: ## %entry7; CHECK-NEXT: .p2align 48; CHECK-NEXT: LBB0_1: ## %loop9; CHECK-NEXT: ## =>This Inner Loop Header: Depth=110; CHECK-NEXT: subq $1, %rsi11; CHECK-NEXT: jb LBB0_412; CHECK-NEXT: ## %bb.2: ## %backedge13; CHECK-NEXT: ## in Loop: Header=BB0_1 Depth=114; CHECK-NEXT: cmpl %edx, (%rdi,%rsi,4)15; CHECK-NEXT: jne LBB0_116; CHECK-NEXT: ## %bb.3: ## %failure17; CHECK-NEXT: ud218; CHECK-NEXT: LBB0_4: ## %exit19; CHECK-NEXT: movl $-1, %eax20; CHECK-NEXT: retq21entry:22 br label %loop23 24loop: ; preds = %backedge, %entry25 %iv = phi i64 [ %iv.next, %backedge ], [ %len, %entry ]26 %iv.next = add nsw i64 %iv, -127 %cond_1 = icmp eq i64 %iv, 028 br i1 %cond_1, label %exit, label %backedge29 30backedge: ; preds = %loop31 %addr = getelementptr inbounds i32, ptr %p, i64 %iv.next32 %loaded = load atomic i32, ptr %addr unordered, align 433 %cond_2 = icmp eq i32 %loaded, %x34 br i1 %cond_2, label %failure, label %loop35 36exit: ; preds = %loop37 ret i32 -138 39failure: ; preds = %backedge40 unreachable41}42 43; Similar to test_01, but we use offsetted pointer as base.44define i32 @test_01a(ptr %p, i64 %len, i32 %x) {45; CHECK-LABEL: test_01a:46; CHECK: ## %bb.0: ## %entry47; CHECK-NEXT: .p2align 448; CHECK-NEXT: LBB1_1: ## %loop49; CHECK-NEXT: ## =>This Inner Loop Header: Depth=150; CHECK-NEXT: subq $1, %rsi51; CHECK-NEXT: jb LBB1_452; CHECK-NEXT: ## %bb.2: ## %backedge53; CHECK-NEXT: ## in Loop: Header=BB1_1 Depth=154; CHECK-NEXT: cmpl %edx, -24(%rdi,%rsi,4)55; CHECK-NEXT: jne LBB1_156; CHECK-NEXT: ## %bb.3: ## %failure57; CHECK-NEXT: ud258; CHECK-NEXT: LBB1_4: ## %exit59; CHECK-NEXT: movl $-1, %eax60; CHECK-NEXT: retq61entry:62 %base = getelementptr inbounds i32, ptr %p, i64 -663 br label %loop64 65loop: ; preds = %backedge, %entry66 %iv = phi i64 [ %iv.next, %backedge ], [ %len, %entry ]67 %iv.next = add nsw i64 %iv, -168 %cond_1 = icmp eq i64 %iv, 069 br i1 %cond_1, label %exit, label %backedge70 71backedge: ; preds = %loop72 %addr = getelementptr inbounds i32, ptr %base, i64 %iv.next73 %loaded = load atomic i32, ptr %addr unordered, align 474 %cond_2 = icmp eq i32 %loaded, %x75 br i1 %cond_2, label %failure, label %loop76 77exit: ; preds = %loop78 ret i32 -179 80failure: ; preds = %backedge81 unreachable82}83 84define i32 @test_02(ptr %p, i64 %len, i32 %x) {85; CHECK-LABEL: test_02:86; CHECK: ## %bb.0: ## %entry87; CHECK-NEXT: .p2align 488; CHECK-NEXT: LBB2_1: ## %loop89; CHECK-NEXT: ## =>This Inner Loop Header: Depth=190; CHECK-NEXT: subq $1, %rsi91; CHECK-NEXT: jb LBB2_492; CHECK-NEXT: ## %bb.2: ## %backedge93; CHECK-NEXT: ## in Loop: Header=BB2_1 Depth=194; CHECK-NEXT: cmpl %edx, (%rdi,%rsi,4)95; CHECK-NEXT: jne LBB2_196; CHECK-NEXT: ## %bb.3: ## %failure97; CHECK-NEXT: ud298; CHECK-NEXT: LBB2_4: ## %exit99; CHECK-NEXT: movl $-1, %eax100; CHECK-NEXT: retq101entry:102 %start = add i64 %len, -1103 br label %loop104 105loop: ; preds = %backedge, %entry106 %iv = phi i64 [ %iv.next, %backedge ], [ %start, %entry ]107 %iv.next = add nsw i64 %iv, -1108 %iv.offset = add i64 %iv, 1109 %iv.next.offset = add i64 %iv.next, 1110 %cond_1 = icmp eq i64 %iv.offset, 0111 br i1 %cond_1, label %exit, label %backedge112 113backedge: ; preds = %loop114 %addr = getelementptr inbounds i32, ptr %p, i64 %iv.next.offset115 %loaded = load atomic i32, ptr %addr unordered, align 4116 %cond_2 = icmp eq i32 %loaded, %x117 br i1 %cond_2, label %failure, label %loop118 119exit: ; preds = %loop120 ret i32 -1121 122failure: ; preds = %backedge123 unreachable124}125 126define i32 @test_03(ptr %p, i64 %len, i32 %x) {127; CHECK-LABEL: test_03:128; CHECK: ## %bb.0: ## %entry129; CHECK-NEXT: .p2align 4130; CHECK-NEXT: LBB3_1: ## %loop131; CHECK-NEXT: ## =>This Inner Loop Header: Depth=1132; CHECK-NEXT: subq $1, %rsi133; CHECK-NEXT: jb LBB3_4134; CHECK-NEXT: ## %bb.2: ## %backedge135; CHECK-NEXT: ## in Loop: Header=BB3_1 Depth=1136; CHECK-NEXT: cmpl %edx, (%rdi,%rsi,4)137; CHECK-NEXT: jne LBB3_1138; CHECK-NEXT: ## %bb.3: ## %failure139; CHECK-NEXT: ud2140; CHECK-NEXT: LBB3_4: ## %exit141; CHECK-NEXT: movl $-1, %eax142; CHECK-NEXT: retq143entry:144 %start = add i64 %len, -100145 br label %loop146 147loop: ; preds = %backedge, %entry148 %iv = phi i64 [ %iv.next, %backedge ], [ %start, %entry ]149 %iv.next = add nsw i64 %iv, -1150 %iv.offset = add i64 %iv, 100151 %iv.next.offset = add i64 %iv.next, 100152 %cond_1 = icmp eq i64 %iv.offset, 0153 br i1 %cond_1, label %exit, label %backedge154 155backedge: ; preds = %loop156 %addr = getelementptr inbounds i32, ptr %p, i64 %iv.next.offset157 %loaded = load atomic i32, ptr %addr unordered, align 4158 %cond_2 = icmp eq i32 %loaded, %x159 br i1 %cond_2, label %failure, label %loop160 161exit: ; preds = %loop162 ret i32 -1163 164failure: ; preds = %backedge165 unreachable166}167 168define void @test_04(i32 %arg) {169; CHECK-LABEL: test_04:170; CHECK: ## %bb.0: ## %bb171; CHECK-NEXT: ud2172bb:173 br label %bb1174 175bb1: ; preds = %bb10, %bb176 %tmp = phi i64 [ 1, %bb ], [ %tmp2, %bb10 ]177 %tmp2 = add nuw nsw i64 %tmp, 1178 br i1 poison, label %bb21, label %bb7179 180bb7: ; preds = %bb1181 %tmp8 = add nsw i64 %tmp, -1182 %tmp9 = getelementptr inbounds i32, ptr addrspace(1) undef, i64 %tmp8183 store atomic i32 undef, ptr addrspace(1) %tmp9 unordered, align 4184 br label %bb11185 186bb10: ; preds = %bb16187 br label %bb1188 189bb11: ; preds = %bb16, %bb7190 switch i32 %arg, label %bb19 [191 i32 0, label %bb17192 i32 1, label %bb16193 i32 2, label %bb15194 i32 3, label %bb14195 i32 4, label %bb12196 ]197 198bb12: ; preds = %bb11199 unreachable200 201bb14: ; preds = %bb11202 unreachable203 204bb15: ; preds = %bb11205 unreachable206 207bb16: ; preds = %bb11208 br i1 poison, label %bb10, label %bb11209 210bb17: ; preds = %bb11211 unreachable212 213bb19: ; preds = %bb11214 unreachable215 216bb21: ; preds = %bb1217 unreachable218}219