diff --git a/llvm/lib/Transforms/Scalar/NewGVN.cpp b/llvm/lib/Transforms/Scalar/NewGVN.cpp --- a/llvm/lib/Transforms/Scalar/NewGVN.cpp +++ b/llvm/lib/Transforms/Scalar/NewGVN.cpp @@ -1994,6 +1994,7 @@ break; case Instruction::BitCast: case Instruction::AddrSpaceCast: + case Instruction::Freeze: return createExpression(I); break; case Instruction::ICmp: diff --git a/llvm/test/Transforms/NewGVN/freeze.ll b/llvm/test/Transforms/NewGVN/freeze.ll --- a/llvm/test/Transforms/NewGVN/freeze.ll +++ b/llvm/test/Transforms/NewGVN/freeze.ll @@ -4,9 +4,7 @@ define i1 @f(i1 %a) { ; CHECK-LABEL: @f( ; CHECK-NEXT: [[B:%.*]] = freeze i1 [[A:%.*]] -; CHECK-NEXT: [[C:%.*]] = freeze i1 [[A]] -; CHECK-NEXT: [[D:%.*]] = and i1 [[B]], [[C]] -; CHECK-NEXT: ret i1 [[D]] +; CHECK-NEXT: ret i1 [[B]] ; %b = freeze i1 %a %c = freeze i1 %a @@ -17,10 +15,9 @@ define void @f_multipleuses(i1 %a) { ; CHECK-LABEL: @f_multipleuses( ; CHECK-NEXT: [[B:%.*]] = freeze i1 [[A:%.*]] -; CHECK-NEXT: [[C:%.*]] = freeze i1 [[A]] ; CHECK-NEXT: call void @use1(i1 [[B]]) -; CHECK-NEXT: call void @use1(i1 [[C]]) -; CHECK-NEXT: call void @use1(i1 [[C]]) +; CHECK-NEXT: call void @use1(i1 [[B]]) +; CHECK-NEXT: call void @use1(i1 [[B]]) ; CHECK-NEXT: ret void ; %b = freeze i1 %a