1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt -S -o - -structurizecfg -verify-dom-info < %s | FileCheck %s 3 4; This test hits a limitation in StructurizeCFG: it doesn't handle infinite-loops. 5; In this case, the IR remains unchanged. 6 7define void @infinite_loop_false(ptr addrspace(1) %out, i1 %cond) { 8; CHECK-LABEL: @infinite_loop_false( 9; CHECK-NEXT: entry: 10; CHECK-NEXT: br i1 [[COND:%.*]], label [[FOR_END:%.*]], label [[FOR_BODY:%.*]] 11; CHECK: for.body: 12; CHECK-NEXT: store volatile i32 999, ptr addrspace(1) [[OUT:%.*]], align 4 13; CHECK-NEXT: br label [[FOR_BODY]] 14; CHECK: for.end: 15; CHECK-NEXT: ret void 16; 17entry: 18 br i1 %cond, label %for.end, label %for.body 19 20for.body: 21 store volatile i32 999, ptr addrspace(1) %out, align 4 22 br label %for.body 23 24for.end: 25 ret void 26} 27 28define void @infinite_loop_on_branch(ptr addrspace(1) %out, i1 %cond) { 29; CHECK-LABEL: @infinite_loop_on_branch( 30; CHECK-NEXT: entry: 31; CHECK-NEXT: br i1 [[COND:%.*]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]] 32; CHECK: if.then: 33; CHECK-NEXT: br label [[FOR_BODY:%.*]] 34; CHECK: for.body: 35; CHECK-NEXT: store volatile i32 999, ptr addrspace(1) [[OUT:%.*]], align 4 36; CHECK-NEXT: br label [[FOR_BODY]] 37; CHECK: if.else: 38; CHECK-NEXT: store volatile i32 111, ptr addrspace(1) [[OUT]], align 4 39; CHECK-NEXT: br label [[EXIT:%.*]] 40; CHECK: exit: 41; CHECK-NEXT: ret void 42; 43entry: 44 br i1 %cond, label %if.then, label %if.else 45 46if.then: 47 br label %for.body 48 49for.body: 50 store volatile i32 999, ptr addrspace(1) %out, align 4 51 br label %for.body 52 53if.else: 54 store volatile i32 111, ptr addrspace(1) %out, align 4 55 br label %exit 56 57exit: 58 ret void 59} 60