159855b9dSNikita Popov; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2*e7618a63SNikita Popov; RUN: opt < %s -passes=gvn -verify-analysis-invalidation -S | FileCheck %s 359855b9dSNikita Popov 459855b9dSNikita Popovdeclare void @llvm.assume(i1) 559855b9dSNikita Popovdeclare void @use(i1) 659855b9dSNikita Popov 7*e7618a63SNikita Popovdefine void @assume_true() { 8*e7618a63SNikita Popov; CHECK-LABEL: @assume_true( 9*e7618a63SNikita Popov; CHECK-NEXT: ret void 10*e7618a63SNikita Popov; 11*e7618a63SNikita Popov call void @llvm.assume(i1 true) 12*e7618a63SNikita Popov ret void 13*e7618a63SNikita Popov} 14*e7618a63SNikita Popov 15*e7618a63SNikita Popovdefine void @assume_false() { 16*e7618a63SNikita Popov; CHECK-LABEL: @assume_false( 17*e7618a63SNikita Popov; CHECK-NEXT: store i8 poison, ptr null, align 1 18*e7618a63SNikita Popov; CHECK-NEXT: ret void 19*e7618a63SNikita Popov; 20*e7618a63SNikita Popov call void @llvm.assume(i1 false) 21*e7618a63SNikita Popov ret void 22*e7618a63SNikita Popov} 23*e7618a63SNikita Popov 2459855b9dSNikita Popovdefine void @assume_arg(i1 %x) { 2559855b9dSNikita Popov; CHECK-LABEL: @assume_arg( 2659855b9dSNikita Popov; CHECK-NEXT: call void @llvm.assume(i1 [[X:%.*]]) 2759855b9dSNikita Popov; CHECK-NEXT: call void @use(i1 true) 2859855b9dSNikita Popov; CHECK-NEXT: ret void 2959855b9dSNikita Popov; 3059855b9dSNikita Popov call void @llvm.assume(i1 %x) 3159855b9dSNikita Popov call void @use(i1 %x) 3259855b9dSNikita Popov ret void 3359855b9dSNikita Popov} 3459855b9dSNikita Popov 3559855b9dSNikita Popovdefine void @assume_not_arg(i1 %x) { 3659855b9dSNikita Popov; CHECK-LABEL: @assume_not_arg( 3759855b9dSNikita Popov; CHECK-NEXT: [[XOR:%.*]] = xor i1 [[X:%.*]], true 3859855b9dSNikita Popov; CHECK-NEXT: call void @llvm.assume(i1 [[XOR]]) 3991ce8e12SNikita Popov; CHECK-NEXT: call void @use(i1 false) 4059855b9dSNikita Popov; CHECK-NEXT: ret void 4159855b9dSNikita Popov; 4259855b9dSNikita Popov %xor = xor i1 %x, true 4359855b9dSNikita Popov call void @llvm.assume(i1 %xor) 4459855b9dSNikita Popov call void @use(i1 %x) 4559855b9dSNikita Popov ret void 4659855b9dSNikita Popov} 4759855b9dSNikita Popov 4859855b9dSNikita Popovdefine void @pr47496(i8 %x) { 4959855b9dSNikita Popov; CHECK-LABEL: @pr47496( 5059855b9dSNikita Popov; CHECK-NEXT: [[CMP:%.*]] = icmp slt i8 [[X:%.*]], 0 5159855b9dSNikita Popov; CHECK-NEXT: [[XOR:%.*]] = xor i1 [[CMP]], true 5259855b9dSNikita Popov; CHECK-NEXT: call void @llvm.assume(i1 [[XOR]]) 5391ce8e12SNikita Popov; CHECK-NEXT: call void @use(i1 false) 5459855b9dSNikita Popov; CHECK-NEXT: ret void 5559855b9dSNikita Popov; 5659855b9dSNikita Popov %cmp = icmp slt i8 %x, 0 5759855b9dSNikita Popov %xor = xor i1 %cmp, true 5859855b9dSNikita Popov call void @llvm.assume(i1 %xor) 5959855b9dSNikita Popov call void @use(i1 %cmp) 6059855b9dSNikita Popov ret void 6159855b9dSNikita Popov} 62