| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py |
| ; RUN: opt -passes=guard-widening -S < %s | FileCheck %s |
| |
| define ptr @test(i1 %cond, ptr %p) { |
| ; CHECK-LABEL: @test( |
| ; CHECK-NEXT: bb: |
| ; CHECK-NEXT: [[VAR:%.*]] = call i1 @llvm.experimental.widenable.condition() |
| ; CHECK-NEXT: [[VAR2:%.*]] = call i1 @llvm.experimental.widenable.condition() |
| ; CHECK-NEXT: [[VAR3:%.*]] = and i1 [[COND:%.*]], [[VAR2]] |
| ; CHECK-NEXT: br label [[BB4:%.*]] |
| ; CHECK: bb4: |
| ; CHECK-NEXT: [[VAR5:%.*]] = load atomic i32, ptr [[P:%.*]] unordered, align 8 |
| ; CHECK-NEXT: [[VAR6:%.*]] = icmp ugt i32 [[VAR5]], 0 |
| ; CHECK-NEXT: [[VAR7:%.*]] = and i1 [[VAR6]], [[VAR]] |
| ; CHECK-NEXT: br i1 [[VAR7]], label [[BB10:%.*]], label [[BB8:%.*]] |
| ; CHECK: bb8: |
| ; CHECK-NEXT: [[VAR9:%.*]] = call ptr (...) @llvm.experimental.deoptimize.p0(i32 13) [ "deopt"(i32 0) ] |
| ; CHECK-NEXT: ret ptr [[VAR9]] |
| ; CHECK: bb10: |
| ; CHECK-NEXT: br i1 [[VAR3]], label [[BB13:%.*]], label [[BB11:%.*]] |
| ; CHECK: bb11: |
| ; CHECK-NEXT: [[VAR12:%.*]] = call ptr (...) @llvm.experimental.deoptimize.p0(i32 13) [ "deopt"(i32 1) ] |
| ; CHECK-NEXT: ret ptr [[VAR12]] |
| ; CHECK: bb13: |
| ; CHECK-NEXT: unreachable |
| ; |
| bb: |
| %var = call i1 @llvm.experimental.widenable.condition() |
| %var2 = call i1 @llvm.experimental.widenable.condition() |
| %var3 = and i1 %cond, %var2 |
| br label %bb4 |
| |
| bb4: ; preds = %bb |
| %var5 = load atomic i32, ptr %p unordered, align 8 |
| %var6 = icmp ugt i32 %var5, 0 |
| %var7 = and i1 %var6, %var |
| br i1 %var7, label %bb10, label %bb8 |
| |
| bb8: ; preds = %bb4 |
| %var9 = call ptr (...) @llvm.experimental.deoptimize.p0(i32 13) [ "deopt"(i32 0) ] |
| ret ptr %var9 |
| |
| bb10: ; preds = %bb4 |
| br i1 %var3, label %bb13, label %bb11 |
| |
| bb11: ; preds = %bb10 |
| %var12 = call ptr (...) @llvm.experimental.deoptimize.p0(i32 13) [ "deopt"(i32 1) ] |
| ret ptr %var12 |
| |
| bb13: ; preds = %bb10 |
| unreachable |
| } |
| |
| declare ptr @llvm.experimental.deoptimize.p0(...) |
| |
| declare i1 @llvm.experimental.widenable.condition() |