diff --git a/llvm/lib/Transforms/Scalar/GVN.cpp b/llvm/lib/Transforms/Scalar/GVN.cpp --- a/llvm/lib/Transforms/Scalar/GVN.cpp +++ b/llvm/lib/Transforms/Scalar/GVN.cpp @@ -531,6 +531,7 @@ case Instruction::AddrSpaceCast: case Instruction::BitCast: case Instruction::Select: + case Instruction::Freeze: case Instruction::ExtractElement: case Instruction::InsertElement: case Instruction::ShuffleVector: diff --git a/llvm/test/Transforms/GVN/freeze.ll b/llvm/test/Transforms/GVN/freeze.ll new file mode 100644 --- /dev/null +++ b/llvm/test/Transforms/GVN/freeze.ll @@ -0,0 +1,14 @@ +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py +; RUN: opt < %s -gvn -S | FileCheck %s +; RUN: opt < %s -passes=gvn -S | FileCheck %s + +define i1 @f(i1 %a) { +; CHECK-LABEL: @f( +; CHECK-NEXT: [[B:%.*]] = freeze i1 [[A:%.*]] +; CHECK-NEXT: ret i1 [[B]] +; + %b = freeze i1 %a + %c = freeze i1 %a + %d = and i1 %b, %b + ret i1 %d +}