diff --git a/llvm/test/Transforms/InstCombine/freeze.ll b/llvm/test/Transforms/InstCombine/freeze.ll index b17b32addd3b18..cda37fa633d9b1 100644 --- a/llvm/test/Transforms/InstCombine/freeze.ll +++ b/llvm/test/Transforms/InstCombine/freeze.ll @@ -821,5 +821,37 @@ exit: ; preds = %loop ret void } +define i8* @freeze_load_noundef(i8** %ptr) { +; CHECK-LABEL: @freeze_load_noundef( +; CHECK-NEXT: [[P:%.*]] = load i8*, i8** [[PTR:%.*]], align 8, !noundef !0 +; CHECK-NEXT: ret i8* [[P]] +; + %p = load i8*, i8** %ptr, !noundef !0 + %p.fr = freeze i8* %p + ret i8* %p.fr +} +define i8* @freeze_load_dereferenceable(i8** %ptr) { +; CHECK-LABEL: @freeze_load_dereferenceable( +; CHECK-NEXT: [[P:%.*]] = load i8*, i8** [[PTR:%.*]], align 8, !dereferenceable !1 +; CHECK-NEXT: [[P_FR:%.*]] = freeze i8* [[P]] +; CHECK-NEXT: ret i8* [[P_FR]] +; + %p = load i8*, i8** %ptr, !dereferenceable !1 + %p.fr = freeze i8* %p + ret i8* %p.fr +} + +define i8* @freeze_load_dereferenceable_or_null(i8** %ptr) { +; CHECK-LABEL: @freeze_load_dereferenceable_or_null( +; CHECK-NEXT: [[P:%.*]] = load i8*, i8** [[PTR:%.*]], align 8, !dereferenceable_or_null !1 +; CHECK-NEXT: [[P_FR:%.*]] = freeze i8* [[P]] +; CHECK-NEXT: ret i8* [[P_FR]] +; + %p = load i8*, i8** %ptr, !dereferenceable_or_null !1 + %p.fr = freeze i8* %p + ret i8* %p.fr +} +!0 = !{} +!1 = !{i64 4}