| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py |
| ; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S | FileCheck %s |
| |
| %0 = type { %1*, %2* } |
| %1 = type { %0* } |
| %2 = type { %0*, %2* } |
| |
| define void @eggs(i1 %arg, i1 %arg16, %0* %arg17, %0* %arg18, %0* %arg19) { |
| ; CHECK-LABEL: @eggs( |
| ; CHECK-NEXT: bb: |
| ; CHECK-NEXT: br i1 [[ARG:%.*]], label [[BB20:%.*]], label [[BB21:%.*]] |
| ; CHECK: bb20: |
| ; CHECK-NEXT: call void @wombat() |
| ; CHECK-NEXT: unreachable |
| ; CHECK: bb21: |
| ; CHECK-NEXT: [[I:%.*]] = icmp eq %0* [[ARG17:%.*]], null |
| ; CHECK-NEXT: [[TMP0:%.*]] = xor i1 [[I]], true |
| ; CHECK-NEXT: call void @llvm.assume(i1 [[TMP0]]) |
| ; CHECK-NEXT: call void @hoge() |
| ; CHECK-NEXT: [[TMP1:%.*]] = xor i1 [[ARG16:%.*]], true |
| ; CHECK-NEXT: call void @llvm.assume(i1 [[TMP1]]) |
| ; CHECK-NEXT: [[I27:%.*]] = getelementptr inbounds [[TMP0]], %0* [[ARG19:%.*]], i64 0, i32 0 |
| ; CHECK-NEXT: [[I28:%.*]] = load %1*, %1** [[I27]], align 8 |
| ; CHECK-NEXT: call void @pluto.1(%1* [[I28]]) |
| ; CHECK-NEXT: call void @pluto() |
| ; CHECK-NEXT: ret void |
| ; |
| bb: |
| br i1 %arg, label %bb20, label %bb21 |
| |
| bb20: ; preds = %bb |
| call void @wombat() |
| br label %bb24 |
| |
| bb21: ; preds = %bb |
| %i = icmp eq %0* %arg17, null |
| br i1 %i, label %bb24, label %bb22 |
| |
| bb22: ; preds = %bb21 |
| call void @hoge() |
| br i1 %arg16, label %bb24, label %bb23 |
| |
| bb23: ; preds = %bb22 |
| br label %bb24 |
| |
| bb24: ; preds = %bb23, %bb22, %bb21, %bb20 |
| %i25 = phi i1 [ false, %bb21 ], [ false, %bb20 ], [ false, %bb23 ], [ false, %bb22 ] |
| %i26 = phi %0* [ null, %bb21 ], [ null, %bb20 ], [ %arg19, %bb23 ], [ null, %bb22 ] |
| %i27 = getelementptr inbounds %0, %0* %i26, i64 0, i32 0 |
| %i28 = load %1*, %1** %i27, align 8 |
| call void @pluto.1(%1* %i28) |
| br i1 %i25, label %bb30, label %bb29 |
| |
| bb29: ; preds = %bb24 |
| call void @pluto() |
| ret void |
| |
| bb30: ; preds = %bb24 |
| call void @spam() |
| ret void |
| } |
| |
| declare void @wombat() |
| declare void @pluto() |
| declare void @spam() |
| declare void @hoge() |
| declare void @pluto.1(%1*) |