1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt < %s -passes=gvn -verify-analysis-invalidation -S | FileCheck %s 3 4declare void @llvm.assume(i1) 5declare void @use(i1) 6 7define void @assume_true() { 8; CHECK-LABEL: @assume_true( 9; CHECK-NEXT: ret void 10; 11 call void @llvm.assume(i1 true) 12 ret void 13} 14 15define void @assume_false() { 16; CHECK-LABEL: @assume_false( 17; CHECK-NEXT: store i8 poison, ptr null, align 1 18; CHECK-NEXT: ret void 19; 20 call void @llvm.assume(i1 false) 21 ret void 22} 23 24define void @assume_arg(i1 %x) { 25; CHECK-LABEL: @assume_arg( 26; CHECK-NEXT: call void @llvm.assume(i1 [[X:%.*]]) 27; CHECK-NEXT: call void @use(i1 true) 28; CHECK-NEXT: ret void 29; 30 call void @llvm.assume(i1 %x) 31 call void @use(i1 %x) 32 ret void 33} 34 35define void @assume_not_arg(i1 %x) { 36; CHECK-LABEL: @assume_not_arg( 37; CHECK-NEXT: [[XOR:%.*]] = xor i1 [[X:%.*]], true 38; CHECK-NEXT: call void @llvm.assume(i1 [[XOR]]) 39; CHECK-NEXT: call void @use(i1 false) 40; CHECK-NEXT: ret void 41; 42 %xor = xor i1 %x, true 43 call void @llvm.assume(i1 %xor) 44 call void @use(i1 %x) 45 ret void 46} 47 48define void @pr47496(i8 %x) { 49; CHECK-LABEL: @pr47496( 50; CHECK-NEXT: [[CMP:%.*]] = icmp slt i8 [[X:%.*]], 0 51; CHECK-NEXT: [[XOR:%.*]] = xor i1 [[CMP]], true 52; CHECK-NEXT: call void @llvm.assume(i1 [[XOR]]) 53; CHECK-NEXT: call void @use(i1 false) 54; CHECK-NEXT: ret void 55; 56 %cmp = icmp slt i8 %x, 0 57 %xor = xor i1 %cmp, true 58 call void @llvm.assume(i1 %xor) 59 call void @use(i1 %cmp) 60 ret void 61} 62