1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt -early-cse -earlycse-debug-hash -S < %s | FileCheck %s 3; RUN: opt -basic-aa -early-cse-memssa -S < %s | FileCheck %s 4 5declare void @use(i1) 6 7define void @test1(float %x, float %y) { 8; CHECK-LABEL: @test1( 9; CHECK-NEXT: [[CMP1:%.*]] = fcmp oeq float [[Y:%.*]], [[X:%.*]] 10; CHECK-NEXT: call void @use(i1 [[CMP1]]) 11; CHECK-NEXT: call void @use(i1 [[CMP1]]) 12; CHECK-NEXT: ret void 13; 14 %cmp1 = fcmp nnan oeq float %y, %x 15 %cmp2 = fcmp oeq float %x, %y 16 call void @use(i1 %cmp1) 17 call void @use(i1 %cmp2) 18 ret void 19} 20 21declare void @use.i8(ptr) 22 23define void @test_inbounds_program_ub_if_first_gep_poison(ptr %ptr, i64 %n) { 24; CHECK-LABEL: @test_inbounds_program_ub_if_first_gep_poison( 25; CHECK-NEXT: [[ADD_PTR_1:%.*]] = getelementptr inbounds i8, ptr [[PTR:%.*]], i64 [[N:%.*]] 26; CHECK-NEXT: call void @use.i8(ptr noundef [[ADD_PTR_1]]) 27; CHECK-NEXT: call void @use.i8(ptr [[ADD_PTR_1]]) 28; CHECK-NEXT: ret void 29; 30 %add.ptr.1 = getelementptr inbounds i8, ptr %ptr, i64 %n 31 call void @use.i8(ptr noundef %add.ptr.1) 32 %add.ptr.2 = getelementptr i8, ptr %ptr, i64 %n 33 call void @use.i8(ptr %add.ptr.2) 34 ret void 35} 36 37define void @test_inbounds_program_not_ub_if_first_gep_poison(ptr %ptr, i64 %n) { 38; CHECK-LABEL: @test_inbounds_program_not_ub_if_first_gep_poison( 39; CHECK-NEXT: [[ADD_PTR_1:%.*]] = getelementptr i8, ptr [[PTR:%.*]], i64 [[N:%.*]] 40; CHECK-NEXT: call void @use.i8(ptr [[ADD_PTR_1]]) 41; CHECK-NEXT: call void @use.i8(ptr [[ADD_PTR_1]]) 42; CHECK-NEXT: ret void 43; 44 %add.ptr.1 = getelementptr inbounds i8, ptr %ptr, i64 %n 45 call void @use.i8(ptr %add.ptr.1) 46 %add.ptr.2 = getelementptr i8, ptr %ptr, i64 %n 47 call void @use.i8(ptr %add.ptr.2) 48 ret void 49} 50