From debaf942cfda61943bcd88d18b7225129b250ddd Mon Sep 17 00:00:00 2001 From: Juneyoung Lee Date: Sat, 13 Feb 2021 16:25:27 +0900 Subject: [PATCH] [InstSimplify] add tests that look into pointer operands of instructions --- llvm/test/Transforms/InstSimplify/freeze.ll | 77 +++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/llvm/test/Transforms/InstSimplify/freeze.ll b/llvm/test/Transforms/InstSimplify/freeze.ll index 66ec5d6..a0db111 100644 --- a/llvm/test/Transforms/InstSimplify/freeze.ll +++ b/llvm/test/Transforms/InstSimplify/freeze.ll @@ -238,6 +238,82 @@ define i32* @gep_inbounds_null_noopt(i32* %p) { ret i32* %k } +define i8* @load_ptr(i8* %ptr) { +; CHECK-LABEL: @load_ptr( +; CHECK-NEXT: [[V:%.*]] = load i8, i8* [[PTR:%.*]], align 1 +; CHECK-NEXT: [[Q:%.*]] = freeze i8* [[PTR]] +; CHECK-NEXT: call void @f4(i8 [[V]]) +; CHECK-NEXT: ret i8* [[Q]] +; + %v = load i8, i8* %ptr + %q = freeze i8* %ptr + call void @f4(i8 %v) ; prevents %v from being DCEd + ret i8* %q +} + +define i8* @store_ptr(i8* %ptr) { +; CHECK-LABEL: @store_ptr( +; CHECK-NEXT: store i8 0, i8* [[PTR:%.*]], align 1 +; CHECK-NEXT: [[Q:%.*]] = freeze i8* [[PTR]] +; CHECK-NEXT: ret i8* [[Q]] +; + store i8 0, i8* %ptr + %q = freeze i8* %ptr + ret i8* %q +} + +define i8* @call_noundef_ptr(i8* %ptr) { +; CHECK-LABEL: @call_noundef_ptr( +; CHECK-NEXT: call void @f3(i8* noundef [[PTR:%.*]]) +; CHECK-NEXT: ret i8* [[PTR]] +; + call void @f3(i8* noundef %ptr) + %q = freeze i8* %ptr + ret i8* %q +} + +define i8* @invoke_noundef_ptr(i8* %ptr) personality i8 1 { +; CHECK-LABEL: @invoke_noundef_ptr( +; CHECK-NEXT: invoke void @f3(i8* noundef [[PTR:%.*]]) +; CHECK-NEXT: to label [[NORMAL:%.*]] unwind label [[UNWIND:%.*]] +; CHECK: normal: +; CHECK-NEXT: ret i8* [[PTR]] +; CHECK: unwind: +; CHECK-NEXT: [[TMP1:%.*]] = landingpad i8* +; CHECK-NEXT: cleanup +; CHECK-NEXT: resume i8* [[PTR]] +; + %q = freeze i8* %ptr + invoke void @f3(i8* noundef %ptr) to label %normal unwind label %unwind +normal: + ret i8* %q +unwind: + landingpad i8* cleanup + resume i8* %q +} + +define i8* @cmpxchg_ptr(i8* %ptr) { +; CHECK-LABEL: @cmpxchg_ptr( +; CHECK-NEXT: [[TMP1:%.*]] = cmpxchg i8* [[PTR:%.*]], i8 1, i8 2 acq_rel monotonic, align 1 +; CHECK-NEXT: [[Q:%.*]] = freeze i8* [[PTR]] +; CHECK-NEXT: ret i8* [[Q]] +; + cmpxchg i8* %ptr, i8 1, i8 2 acq_rel monotonic + %q = freeze i8* %ptr + ret i8* %q +} + +define i8* @atomicrmw_ptr(i8* %ptr) { +; CHECK-LABEL: @atomicrmw_ptr( +; CHECK-NEXT: [[TMP1:%.*]] = atomicrmw add i8* [[PTR:%.*]], i8 1 acquire, align 1 +; CHECK-NEXT: [[Q:%.*]] = freeze i8* [[PTR]] +; CHECK-NEXT: ret i8* [[Q]] +; + atomicrmw add i8* %ptr, i8 1 acquire + %q = freeze i8* %ptr + ret i8* %q +} + define i1 @icmp(i32 %a, i32 %b) { ; CHECK-LABEL: @icmp( ; CHECK-NEXT: [[A_FR:%.*]] = freeze i32 [[A:%.*]] @@ -431,3 +507,4 @@ B: declare void @f1(i1) declare void @f2() declare void @f3(i8*) +declare void @f4(i8) -- 2.7.4