From 65150b878aaefc7c63c303ce572d23d30349c82f Mon Sep 17 00:00:00 2001 From: William Moses Date: Tue, 18 Oct 2022 14:04:42 -0400 Subject: [PATCH] Fix illegal invariant group on unwrap (#905) --- enzyme/Enzyme/GradientUtils.cpp | 11 ---- enzyme/test/Enzyme/ReverseMode/alloclut.ll | 2 +- enzyme/test/Enzyme/ReverseMode/allocnotape.ll | 2 +- enzyme/test/Enzyme/ReverseMode/condswload.ll | 6 +- .../ReverseMode/duplicatemallocsubloop_set.ll | 12 ++-- enzyme/test/Enzyme/ReverseMode/fwdsolve.ll | 8 +-- enzyme/test/Enzyme/ReverseMode/infAllocR.ll | 2 +- enzyme/test/Enzyme/ReverseMode/infAllocR_2.ll | 2 +- enzyme/test/Enzyme/ReverseMode/loopremat.ll | 2 +- .../Enzyme/ReverseMode/looprematmalloc.ll | 2 +- .../test/Enzyme/ReverseMode/maxlimitdouble.ll | 10 ++-- .../test/Enzyme/ReverseMode/metacachelicm2.ll | 4 +- enzyme/test/Enzyme/ReverseMode/mm.ll | 16 ++--- enzyme/test/Enzyme/ReverseMode/mm2.ll | 16 ++--- enzyme/test/Enzyme/ReverseMode/mpirep.ll | 2 +- enzyme/test/Enzyme/ReverseMode/noaliaspres.ll | 16 ++--- enzyme/test/Enzyme/ReverseMode/ompsqloop.ll | 4 +- enzyme/test/Enzyme/ReverseMode/ompsqloop2.ll | 2 +- .../Enzyme/ReverseMode/ompsqloopoutofplace.ll | 4 +- .../test/Enzyme/ReverseMode/remat_outside.ll | 2 +- enzyme/test/Enzyme/ReverseMode/sumnllist.ll | 2 +- .../Enzyme/ReverseMode/threeexit-unopt.ll | 4 +- .../test/Integration/ReverseMode/remat2.cpp | 59 +++++++++++++++++++ 23 files changed, 119 insertions(+), 71 deletions(-) create mode 100644 enzyme/test/Integration/ReverseMode/remat2.cpp diff --git a/enzyme/Enzyme/GradientUtils.cpp b/enzyme/Enzyme/GradientUtils.cpp index 7a1524c4146ae..e5e42bce64759 100644 --- a/enzyme/Enzyme/GradientUtils.cpp +++ b/enzyme/Enzyme/GradientUtils.cpp @@ -5241,17 +5241,6 @@ Value *GradientUtils::lookupM(Value *val, IRBuilder<> &BuilderM, if (op) { assert(op); assert(op->getType()); - if (auto load_op = dyn_cast(prelcssaInst)) { - if (auto new_op = dyn_cast(op)) { - MDNode *invgroup = - load_op->getMetadata(LLVMContext::MD_invariant_group); - if (invgroup == nullptr) { - invgroup = MDNode::getDistinct(load_op->getContext(), {}); - load_op->setMetadata(LLVMContext::MD_invariant_group, invgroup); - } - new_op->setMetadata(LLVMContext::MD_invariant_group, invgroup); - } - } if (op->getType() != inst->getType()) { llvm::errs() << " op: " << *op << " inst: " << *inst << "\n"; } diff --git a/enzyme/test/Enzyme/ReverseMode/alloclut.ll b/enzyme/test/Enzyme/ReverseMode/alloclut.ll index b5865d3b7cc57..adc94cf96b261 100644 --- a/enzyme/test/Enzyme/ReverseMode/alloclut.ll +++ b/enzyme/test/Enzyme/ReverseMode/alloclut.ll @@ -97,7 +97,7 @@ declare double @__enzyme_autodiff(double (double, i32*)*, ...) ; CHECK-NEXT: %9 = getelementptr inbounds [2 x double], [2 x double]* %val_malloccache, i64 %"iv'ac.0" ; CHECK-NEXT: %idx_unwrap = add i64 %"iv'ac.0", %"iv1'ac.0" ; CHECK-NEXT: %zgep_unwrap = getelementptr inbounds i32, i32* %z, i64 %idx_unwrap -; CHECK-NEXT: %lu_unwrap = load i32, i32* %zgep_unwrap, align 4, !invariant.group ! +; CHECK-NEXT: %lu_unwrap = load i32, i32* %zgep_unwrap, align 4 ; CHECK-NEXT: %10 = getelementptr inbounds [2 x double], [2 x double]* %9, i64 0, i32 %lu_unwrap ; CHECK-NEXT: %11 = load double, double* %10, align 8, !invariant.group ! ; CHECK-NEXT: %m0diffeval = fmul fast double %"add'de.1", %11 diff --git a/enzyme/test/Enzyme/ReverseMode/allocnotape.ll b/enzyme/test/Enzyme/ReverseMode/allocnotape.ll index e1eeca139c32c..381a3b4bd8c6b 100644 --- a/enzyme/test/Enzyme/ReverseMode/allocnotape.ll +++ b/enzyme/test/Enzyme/ReverseMode/allocnotape.ll @@ -120,7 +120,7 @@ attributes #4 = { nounwind } ; CHECK: invertfor.body5: ; preds = %for.body5, %incinvertfor.body5 ; CHECK-NEXT: %"iv1'ac.0" = phi i64 [ %[[a7:.+]], %incinvertfor.body5 ], [ 19, %for.body5 ] ; CHECK-NEXT: %arrayidx9_unwrap = getelementptr inbounds [20 x i32], [20 x i32]* %tmp, i64 0, i64 %"iv1'ac.0" -; CHECK-NEXT: %_unwrap = load i32, i32* %arrayidx9_unwrap, align 4, !tbaa ![[itbaa]], !invariant.group ! +; CHECK-NEXT: %_unwrap = load i32, i32* %arrayidx9_unwrap, align 4, !tbaa ![[itbaa]] ; CHECK-NEXT: %conv_unwrap = sitofp i32 %_unwrap to double ; CHECK-NEXT: %m0diffe = fmul fast double %conv_unwrap, %differeturn ; CHECK-NEXT: %"arrayidx7'ipg_unwrap" = getelementptr inbounds double, double* %"x'", i64 %"iv1'ac.0" diff --git a/enzyme/test/Enzyme/ReverseMode/condswload.ll b/enzyme/test/Enzyme/ReverseMode/condswload.ll index b8cf4db3cf50f..89148ffd15e60 100644 --- a/enzyme/test/Enzyme/ReverseMode/condswload.ll +++ b/enzyme/test/Enzyme/ReverseMode/condswload.ll @@ -79,17 +79,17 @@ entry: ; CHECK: invertend_phirc: ; preds = %invertend ; CHECK-NEXT: %g3_unwrap = getelementptr inbounds double, double* %a, i32 128 -; CHECK-NEXT: %l3_unwrap = load double, double* %g3_unwrap, align 8, !invariant.group ! +; CHECK-NEXT: %l3_unwrap = load double, double* %g3_unwrap, align 8 ; CHECK-NEXT: br label %invertend_phimerge ; CHECK: invertend_phirc1: ; preds = %invertend ; CHECK-NEXT: %g1_unwrap = getelementptr inbounds double, double* %a, i32 32 -; CHECK-NEXT: %l1_unwrap = load double, double* %g1_unwrap, align 8, !invariant.group ! +; CHECK-NEXT: %l1_unwrap = load double, double* %g1_unwrap, align 8 ; CHECK-NEXT: br label %invertend_phimerge ; CHECK: invertend_phirc2: ; preds = %invertend ; CHECK-NEXT: %g2_unwrap = getelementptr inbounds double, double* %a, i32 64 -; CHECK-NEXT: %l2_unwrap = load double, double* %g2_unwrap, align 8, !invariant.group ! +; CHECK-NEXT: %l2_unwrap = load double, double* %g2_unwrap, align 8 ; CHECK-NEXT: br label %invertend_phimerge ; CHECK: invertend_phimerge: diff --git a/enzyme/test/Enzyme/ReverseMode/duplicatemallocsubloop_set.ll b/enzyme/test/Enzyme/ReverseMode/duplicatemallocsubloop_set.ll index 4b9b863dbb6b1..ff609d618e8ba 100644 --- a/enzyme/test/Enzyme/ReverseMode/duplicatemallocsubloop_set.ll +++ b/enzyme/test/Enzyme/ReverseMode/duplicatemallocsubloop_set.ll @@ -124,21 +124,21 @@ attributes #9 = { nounwind } ; CHECK-DAG: %[[a6_unwrap1:.+]] = bitcast i8* %remat_a5 to double* ; CHECK-DAG: %[[_unwrap2:.+]] = trunc i64 %"iv'ac.0" to i32 ; CHECK-DAG: %[[a10_unwrap:.+]] = getelementptr inbounds double, double* %a1, i32 %[[_unwrap2]] -; CHECK-DAG: %[[a11_unwrap:.+]] = load double, double* %[[a10_unwrap]], align 8, !invariant.group ! +; CHECK-DAG: %[[a11_unwrap:.+]] = load double, double* %[[a10_unwrap]], align 8 ; CHECK-NEXT: store double %[[a11_unwrap]], double* %[[a6_unwrap1]], align 8 ; CHECK-NEXT: %_unwrap = trunc i64 %"iv'ac.0" to i32 ; CHECK-NEXT: %"a13'ipg_unwrap" = getelementptr inbounds double, double* %"a0'", i32 %_unwrap ; CHECK-NEXT: %2 = load double, double* %"a13'ipg_unwrap", align 8 -; CHECK-NEXT: store double 0.000000e+00, double* %"a13'ipg_unwrap", align 8, !alias.scope !12, !noalias !15 +; CHECK-NEXT: store double 0.000000e+00, double* %"a13'ipg_unwrap", align 8, !alias.scope !11, !noalias !14 ; CHECK-NEXT: %a6_unwrap = bitcast i8* %remat_a5 to double* ; CHECK-NEXT: %"a6'ipc_unwrap" = bitcast i8* %"a5'mi" to double* ; CHECK-NEXT: call void @diffef(double* %a6_unwrap, double* %"a6'ipc_unwrap", double %2) -; CHECK-NEXT: %3 = load double, double* %"a6'ipc_unwrap", align 8, !noalias !11 -; CHECK-NEXT: store double 0.000000e+00, double* %"a6'ipc_unwrap", align 8, !alias.scope !17, !noalias !20 +; CHECK-NEXT: %3 = load double, double* %"a6'ipc_unwrap", align 8, !noalias !10 +; CHECK-NEXT: store double 0.000000e+00, double* %"a6'ipc_unwrap", align 8, !alias.scope !16, !noalias !19 ; CHECK-NEXT: %"a10'ipg_unwrap" = getelementptr inbounds double, double* %"a1'", i32 %_unwrap -; CHECK-NEXT: %4 = load double, double* %"a10'ipg_unwrap", align 8, !alias.scope !22, !noalias !25 +; CHECK-NEXT: %4 = load double, double* %"a10'ipg_unwrap", align 8, !alias.scope !21, !noalias !24 ; CHECK-NEXT: %5 = fadd fast double %4, %3 -; CHECK-NEXT: store double %5, double* %"a10'ipg_unwrap", align 8, !alias.scope !22, !noalias !25 +; CHECK-NEXT: store double %5, double* %"a10'ipg_unwrap", align 8, !alias.scope !21, !noalias !24 ; CHECK-NEXT: call void @llvm.memset.p0i8.i64(i8* %"a5'mi", i8 0, i64 8, i1 false) ; CHECK-NEXT: tail call void @free(i8* nonnull %"a5'mi") ; CHECK-NEXT: tail call void @free(i8* %remat_a5) diff --git a/enzyme/test/Enzyme/ReverseMode/fwdsolve.ll b/enzyme/test/Enzyme/ReverseMode/fwdsolve.ll index 176ededa56079..2e1adf556f09e 100644 --- a/enzyme/test/Enzyme/ReverseMode/fwdsolve.ll +++ b/enzyme/test/Enzyme/ReverseMode/fwdsolve.ll @@ -97,9 +97,9 @@ declare dso_local void @__enzyme_autodiff(i8*, ...) ; CHECK-NEXT: %iv.next2 = add nuw nsw i64 %iv1, 1 ; CHECK-NEXT: %add = add i64 %iv1, %mul ; CHECK-NEXT: %arrayidx10 = getelementptr inbounds double, double* %L, i64 %add -; CHECK-NEXT: %3 = load double, double* %arrayidx10, align 8, !tbaa !2, !invariant.group !6 +; CHECK-NEXT: %3 = load double, double* %arrayidx10, align 8, !tbaa !2 ; CHECK-NEXT: %arrayidx11 = getelementptr inbounds double, double* %out, i64 %iv1 -; CHECK-NEXT: %4 = load double, double* %arrayidx11, align 8, !tbaa !2, !invariant.group !7 +; CHECK-NEXT: %4 = load double, double* %arrayidx11, align 8, !tbaa !2 ; CHECK-NEXT: %mul12 = fmul double %3, %4 ; CHECK-NEXT: %sub13 = fsub double %tmp.034, %mul12 ; CHECK-NEXT: %exitcond = icmp eq i64 %iv.next2, %[[i1]] @@ -145,12 +145,12 @@ declare dso_local void @__enzyme_autodiff(i8*, ...) ; CHECK-NEXT: %[[i11:.+]] = {{(fadd|fsub)}} fast double %"mul12'de.1" ; , %[[i9]] ; CHECK-NEXT: %arrayidx11_unwrap = getelementptr inbounds double, double* %out, i64 %"iv1'ac.0" -; CHECK-NEXT: %_unwrap = load double, double* %arrayidx11_unwrap, align 8, !tbaa !2, !invariant.group !7 +; CHECK-NEXT: %_unwrap = load double, double* %arrayidx11_unwrap, align 8, !tbaa !2 ; CHECK-NEXT: %m0diffe = fmul fast double %[[i11]], %_unwrap ; CHECK-NEXT: %mul_unwrap = mul i64 %"iv'ac.0", %N ; CHECK-NEXT: %add_unwrap = add i64 %"iv1'ac.0", %mul_unwrap ; CHECK-NEXT: %arrayidx10_unwrap = getelementptr inbounds double, double* %L, i64 %add_unwrap -; CHECK-NEXT: %[[_unwrap3:.+]] = load double, double* %arrayidx10_unwrap, align 8, !tbaa !2, !invariant.group !6 +; CHECK-NEXT: %[[_unwrap3:.+]] = load double, double* %arrayidx10_unwrap, align 8, !tbaa !2 ; CHECK-NEXT: %m1diffe = fmul fast double %[[i11]], %[[_unwrap3]] ; CHECK-NEXT: %[[i12:.+]] = fadd fast double %"'de2.1", %m0diffe ; CHECK-NEXT: %[[i13:.+]] = fadd fast double %"'de3.1", %m1diffe diff --git a/enzyme/test/Enzyme/ReverseMode/infAllocR.ll b/enzyme/test/Enzyme/ReverseMode/infAllocR.ll index d7571e75c4130..fefe29ec01ba6 100644 --- a/enzyme/test/Enzyme/ReverseMode/infAllocR.ll +++ b/enzyme/test/Enzyme/ReverseMode/infAllocR.ll @@ -139,7 +139,7 @@ attributes #3 = { nounwind } ; CHECK-NEXT: store double 0.000000e+00, double* %"arrayidx5'ipg_unwrap", align 8 ; CHECK-NEXT: %m0diffei10 = fmul fast double %[[i6]], %rho0 ; CHECK-NEXT: %[[arrayidx4_unwrap5:.+]] = getelementptr inbounds double, double* %i4_unwrap, i64 %"iv1'ac.0" -; CHECK-NEXT: %[[i10_unwrap6:.+]] = load double, double* %[[arrayidx4_unwrap5]], align 8, !invariant.group ! +; CHECK-NEXT: %[[i10_unwrap6:.+]] = load double, double* %[[arrayidx4_unwrap5]], align 8 ; CHECK-NEXT: %m1differho0 = fmul fast double %[[i6]], %[[i10_unwrap6]] ; CHECK-NEXT: %[[i8]] = fadd fast double %"rho0'de.0", %m1differho0 ; CHECK-NEXT: %"arrayidx4'ipg_unwrap" = getelementptr inbounds double, double* %"i4'ipc_unwrap8", i64 %"iv1'ac.0" diff --git a/enzyme/test/Enzyme/ReverseMode/infAllocR_2.ll b/enzyme/test/Enzyme/ReverseMode/infAllocR_2.ll index a7caf5a34656e..2a3056b80a4ba 100644 --- a/enzyme/test/Enzyme/ReverseMode/infAllocR_2.ll +++ b/enzyme/test/Enzyme/ReverseMode/infAllocR_2.ll @@ -161,7 +161,7 @@ attributes #3 = { nounwind } ; CHECK-NEXT: %m0diffei10 = fmul fast double %[[i10]], %rho0 ; CHECK-NEXT: %[[sub_unwrap4:.+]] = sub i64 %"iv1'ac.0", 1 ; CHECK-NEXT: %[[arrayidx4_unwrap5:.+]] = getelementptr inbounds double, double* %i4_unwrap, i64 %[[sub_unwrap4]] -; CHECK-NEXT: %[[i10_unwrap6:.+]] = load double, double* %[[arrayidx4_unwrap5]], align 8, !invariant.group ! +; CHECK-NEXT: %[[i10_unwrap6:.+]] = load double, double* %[[arrayidx4_unwrap5]], align 8 ; CHECK-NEXT: %m1differho0 = fmul fast double %[[i10]], %[[i10_unwrap6]] ; CHECK-NEXT: %[[i11:.+]] = fadd fast double %"i10'de.1", %m0diffei10 ; CHECK-NEXT: %[[i12]] = fadd fast double %"rho0'de.1", %m1differho0 diff --git a/enzyme/test/Enzyme/ReverseMode/loopremat.ll b/enzyme/test/Enzyme/ReverseMode/loopremat.ll index 7975a4f8f0024..b8874873c113d 100644 --- a/enzyme/test/Enzyme/ReverseMode/loopremat.ll +++ b/enzyme/test/Enzyme/ReverseMode/loopremat.ll @@ -168,7 +168,7 @@ attributes #4 = { nounwind } ; CHECK: remat_loop_loopExit: ; preds = %remat_loop_setLoop ; CHECK-NEXT: %i7_unwrap = getelementptr inbounds [30 x double], [30 x double]* %i, i64 0, i64 %"iv'ac.0" -; CHECK-NEXT: %i8_unwrap = load double, double* %i7_unwrap, align 8, !tbaa !2, !invariant.group ! +; CHECK-NEXT: %i8_unwrap = load double, double* %i7_unwrap, align 8, !tbaa !2 ; CHECK-NEXT: %m0diffei8 = fmul fast double %"i10'de.0", %i8_unwrap ; CHECK-NEXT: %20 = fadd fast double %m0diffei8, %m0diffei8 ; CHECK-NEXT: %"i7'ipg_unwrap" = getelementptr inbounds [30 x double], [30 x double]* %"i'ipa", i64 0, i64 %"iv'ac.0" diff --git a/enzyme/test/Enzyme/ReverseMode/looprematmalloc.ll b/enzyme/test/Enzyme/ReverseMode/looprematmalloc.ll index bcf39e924e224..c3de3d5233e11 100644 --- a/enzyme/test/Enzyme/ReverseMode/looprematmalloc.ll +++ b/enzyme/test/Enzyme/ReverseMode/looprematmalloc.ll @@ -197,7 +197,7 @@ attributes #4 = { nounwind } ; CHECK: remat_loop_loopExit: ; preds = %remat_loop_setLoop ; CHECK-NEXT: %i7_unwrap = getelementptr inbounds [30 x double], [30 x double]* %i_unwrap, i64 0, i64 %"iv'ac.0" -; CHECK-NEXT: %i8_unwrap = load double, double* %i7_unwrap, align 8, !tbaa !2, !invariant.group ! +; CHECK-NEXT: %i8_unwrap = load double, double* %i7_unwrap, align 8, !tbaa !2 ; CHECK-NEXT: %m0diffei8 = fmul fast double %"i10'de.0", %i8_unwrap ; CHECK-NEXT: %20 = fadd fast double %m0diffei8, %m0diffei8 ; CHECK-NEXT: %"i'ipc_unwrap8" = bitcast i8* %"i1'mi" to [30 x double]* diff --git a/enzyme/test/Enzyme/ReverseMode/maxlimitdouble.ll b/enzyme/test/Enzyme/ReverseMode/maxlimitdouble.ll index 428f9632ec3fa..5f6b908edd95c 100644 --- a/enzyme/test/Enzyme/ReverseMode/maxlimitdouble.ll +++ b/enzyme/test/Enzyme/ReverseMode/maxlimitdouble.ll @@ -19128,14 +19128,14 @@ attributes #28 = { builtin } ; CHECK-NEXT: %minim132_unwrap = select i1 %tmp12_unwrap, i64 0, i64 %tmp18_unwrap ; CHECK-NEXT: %im1j_unwrap = add nuw nsw i64 %"iv1'ac.0", %minim132_unwrap ; CHECK-NEXT: %tmp43_unwrap = getelementptr inbounds double, double* %arg3, i64 %im1j_unwrap -; CHECK-NEXT: %vim1j_unwrap = load double, double* %tmp43_unwrap, align 8, !tbaa !31, !invariant.group ! +; CHECK-NEXT: %vim1j_unwrap = load double, double* %tmp43_unwrap, align 8, !tbaa !31 ; CHECK-NEXT: %tmp56_unwrap = fadd fast double %vim1j_unwrap, %v0 ; CHECK-NEXT: %tmp13_unwrap = icmp eq i64 %"iv'ac.0", 31 ; CHECK-NEXT: %ip132_unwrap = add i64 %i32_unwrap, 32 ; CHECK-NEXT: %maxip132_unwrap = select i1 %tmp13_unwrap, i64 992, i64 %ip132_unwrap ; CHECK-NEXT: %ip1j_unwrap = add nuw nsw i64 %"iv1'ac.0", %maxip132_unwrap ; CHECK-NEXT: %tmp46_unwrap = getelementptr inbounds double, double* %arg3, i64 %ip1j_unwrap -; CHECK-NEXT: %vip1j_unwrap = load double, double* %tmp46_unwrap, align 8, !tbaa !31, !invariant.group ! +; CHECK-NEXT: %vip1j_unwrap = load double, double* %tmp46_unwrap, align 8, !tbaa !31 ; CHECK-NEXT: %tmp57_unwrap = fadd fast double %tmp56_unwrap, %vip1j_unwrap ; CHECK-NEXT: %endj_unwrap = icmp eq i64 %"iv1'ac.0", 31 ; CHECK-NEXT: %iv.next2_unwrap = add nuw nsw i64 %"iv1'ac.0", 1 @@ -19143,7 +19143,7 @@ attributes #28 = { builtin } ; CHECK-NEXT: %ijp1_unwrap = add i64 %maxjp1_unwrap, %i32_unwrap ; CHECK-NEXT: %ijp1AND_unwrap = and i64 %ijp1_unwrap, 4294967295 ; CHECK-NEXT: %tmp50_unwrap = getelementptr inbounds double, double* %arg3, i64 %ijp1AND_unwrap -; CHECK-NEXT: %vijp1_unwrap = load double, double* %tmp50_unwrap, align 8, !tbaa !31, !invariant.group ! +; CHECK-NEXT: %vijp1_unwrap = load double, double* %tmp50_unwrap, align 8, !tbaa !31 ; CHECK-NEXT: %tmp58_unwrap = fadd fast double %tmp57_unwrap, %vijp1_unwrap ; CHECK-NEXT: %tmp28_unwrap = icmp eq i64 %"iv1'ac.0", 0 ; CHECK-NEXT: %jm1_unwrap = add i64 %"iv1'ac.0", -1 @@ -19152,7 +19152,7 @@ attributes #28 = { builtin } ; CHECK-NEXT: %tmp31_ext_unwrap = zext i32 %tmp31_unwrap to i64 ; CHECK-NEXT: %ijm1_unwrap = add i64 %tmp31_ext_unwrap, %i32_unwrap ; CHECK-NEXT: %tmp54_unwrap = getelementptr inbounds double, double* %arg3, i64 %ijm1_unwrap -; CHECK-NEXT: %vijm1_unwrap = load double, double* %tmp54_unwrap, align 8, !tbaa !31, !invariant.group ! +; CHECK-NEXT: %vijm1_unwrap = load double, double* %tmp54_unwrap, align 8, !tbaa !31 ; CHECK-NEXT: %sum_unwrap = fadd fast double %tmp58_unwrap, %vijm1_unwrap ; CHECK-NEXT: %m0diffeA = fmul fast double %7, %sum_unwrap ; CHECK-NEXT: %m1diffesum = fmul fast double %7, %A @@ -19175,7 +19175,7 @@ attributes #28 = { builtin } ; CHECK-NEXT: %17 = fadd fast double %16, %m1diffesum ; CHECK-NEXT: store double %17, double* %"tmp43'ipg_unwrap", align 8 ; CHECK-NEXT: %tmp33_unwrap = getelementptr inbounds double, double* %arg3, i64 %ij_unwrap -; CHECK-NEXT: %vij_unwrap = load double, double* %tmp33_unwrap, align 8, !tbaa !31, !invariant.group ! +; CHECK-NEXT: %vij_unwrap = load double, double* %tmp33_unwrap, align 8, !tbaa !31 ; CHECK-NEXT: %m0diffeterm2 = fmul fast double %7, %vij_unwrap ; CHECK-NEXT: %tmp61_unwrap = fmul fast double %vij_unwrap, %v0 ; CHECK-NEXT: %term2_unwrap = fsub fast double %A, %tmp61_unwrap diff --git a/enzyme/test/Enzyme/ReverseMode/metacachelicm2.ll b/enzyme/test/Enzyme/ReverseMode/metacachelicm2.ll index db3e4a16b7ed5..5182164665b33 100644 --- a/enzyme/test/Enzyme/ReverseMode/metacachelicm2.ll +++ b/enzyme/test/Enzyme/ReverseMode/metacachelicm2.ll @@ -77,7 +77,7 @@ attributes #2 = { "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail- ; CHECK-NEXT: %iv = phi i64 [ %iv.next, %for.cond.cleanup4 ], [ 0, %entry ] ; CHECK-NEXT: %iv.next = add nuw nsw i64 %iv, 1 ; CHECK-NEXT: %arrayidx = getelementptr inbounds i64, i64* %array, i64 %iv -; CHECK-NEXT: %len = load i64, i64* %arrayidx, align 8, !tbaa !6, !invariant.group ![[g8:[0-9]+]] +; CHECK-NEXT: %len = load i64, i64* %arrayidx, align 8, !tbaa !6 ; CHECK-NEXT: %0 = getelementptr inbounds double*, double** %ld_malloccache, i64 %iv ; CHECK-NEXT: %mallocsize = mul nuw nsw i64 %len, 8 ; CHECK-NEXT: %[[malloccall3:.+]] = tail call noalias nonnull i8* @malloc(i64 %mallocsize) @@ -132,7 +132,7 @@ attributes #2 = { "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail- ; CHECK-NEXT: store double 0.000000e+00, double* %"arrayidx9'ipg_unwrap", align 8 ; CHECK-NEXT: %10 = fadd fast double %"add'de.0", %9 ; CHECK-NEXT: %arrayidx_unwrap = getelementptr inbounds i64, i64* %array, i64 %"iv'ac.0" -; CHECK-NEXT: %len_unwrap = load i64, i64* %arrayidx_unwrap, align 8, !tbaa !6, !invariant.group ![[g8]] +; CHECK-NEXT: %len_unwrap = load i64, i64* %arrayidx_unwrap, align 8, !tbaa !6 ; CHECK-NEXT: %_unwrap = add i64 %len_unwrap, -1 ; CHECK-NEXT: br label %invertfor.body5 diff --git a/enzyme/test/Enzyme/ReverseMode/mm.ll b/enzyme/test/Enzyme/ReverseMode/mm.ll index bbf92bbd7dc7d..7574c89a61b10 100644 --- a/enzyme/test/Enzyme/ReverseMode/mm.ll +++ b/enzyme/test/Enzyme/ReverseMode/mm.ll @@ -116,10 +116,10 @@ attributes #3 = { argmemonly nounwind } ; CHECK: for.body5: ; preds = %for.inc44, %for.cond2.preheader ; CHECK-NEXT: %iv1 = phi i64 [ %iv.next2, %for.inc44 ], [ 0, %for.cond2.preheader ] ; CHECK-NEXT: %iv.next2 = add nuw nsw i64 %iv1, 1 -; CHECK-NEXT: %L_lhs_i = load float, float* %lhs_i, align 8, !tbaa !6, !invariant.group ![[lhsiv:[0-9]+]] +; CHECK-NEXT: %L_lhs_i = load float, float* %lhs_i, align 8, !tbaa !6 ; CHECK-NEXT: %[[ivrows:.+]] = mul nsw i64 %iv1, %rows ; CHECK-NEXT: %rhs_ij = getelementptr inbounds float, float* %rhs_data, i64 %[[ivrows]] -; CHECK-NEXT: %L_rhs_ij = load float, float* %rhs_ij, align 8, !tbaa !6, !invariant.group ![[rhsiv:[0-9]+]] +; CHECK-NEXT: %L_rhs_ij = load float, float* %rhs_ij, align 8, !tbaa !6 ; CHECK-NEXT: %mul = fmul fast float %L_rhs_ij, %L_lhs_i ; CHECK-NEXT: %mul_ext = fpext float %mul to double ; CHECK-NEXT: %[[ivrowsiv:.+]] = add nsw i64 %[[ivrows]], %iv @@ -134,10 +134,10 @@ attributes #3 = { argmemonly nounwind } ; CHECK-NEXT: %[[n4rows:.+]] = mul nsw i64 %iv.next4, %rows ; CHECK-NEXT: %[[riv:.+]] = add nsw i64 %[[n4rows]], %iv ; CHECK-NEXT: %lhs_ki = getelementptr inbounds float, float* %lhs_data, i64 %[[riv]] -; CHECK-NEXT: %L_lhs_ki = load float, float* %lhs_ki, align 8, !tbaa !6, !invariant.group ! +; CHECK-NEXT: %L_lhs_ki = load float, float* %lhs_ki, align 8, !tbaa !6 ; CHECK-NEXT: %[[iv41:.+]] = add nsw i64 %iv.next4, %[[ivrows]] ; CHECK-NEXT: %rhs_kk = getelementptr inbounds float, float* %rhs_data, i64 %[[iv41]] -; CHECK-NEXT: %L_rhs_kk = load float, float* %rhs_kk, align 8, !tbaa !6, !invariant.group ! +; CHECK-NEXT: %L_rhs_kk = load float, float* %rhs_kk, align 8, !tbaa !6 ; CHECK-NEXT: %mul2 = fmul fast float %L_rhs_kk, %L_lhs_ki ; CHECK-NEXT: %add = fadd fast float %[[fphi]], %mul2 ; CHECK-NEXT: %add_ext = fpext float %add to double @@ -170,10 +170,10 @@ attributes #3 = { argmemonly nounwind } ; CHECK-NEXT: %[[ptrunc:.+]] = fptrunc double %[[oiji]] to float ; CHECK-NEXT: %[[a10:.+]] = fadd fast float %[[a18:.+]], %[[ptrunc]] ; CHECK-NEXT: %lhs_i_unwrap = getelementptr inbounds float, float* %lhs_data, i64 %"iv'ac.0" -; CHECK-NEXT: %L_lhs_i_unwrap = load float, float* %lhs_i_unwrap, align 8, !tbaa !6, !invariant.group ![[lhsiv]] +; CHECK-NEXT: %L_lhs_i_unwrap = load float, float* %lhs_i_unwrap, align 8, !tbaa !6 ; CHECK-NEXT: %m0diffeL_rhs_ij = fmul fast float %[[a10]], %L_lhs_i_unwrap ; CHECK-NEXT: %rhs_ij_unwrap = getelementptr inbounds float, float* %rhs_data, i64 %[[unwrap7:.+]] -; CHECK-NEXT: %L_rhs_ij_unwrap = load float, float* %rhs_ij_unwrap, align 8, !tbaa !6, !invariant.group ![[rhsiv]] +; CHECK-NEXT: %L_rhs_ij_unwrap = load float, float* %rhs_ij_unwrap, align 8, !tbaa !6 ; CHECK-NEXT: %m1diffeL_lhs_i = fmul fast float %[[a10]], %L_rhs_ij_unwrap ; CHECK-NEXT: %"rhs_ij'ipg_unwrap" = getelementptr inbounds float, float* %[[drhs_data]], i64 %[[unwrap7]] ; CHECK-NEXT: %[[a11:.+]] = load float, float* %"rhs_ij'ipg_unwrap", align 8 @@ -203,11 +203,11 @@ attributes #3 = { argmemonly nounwind } ; CHECK-NEXT: %[[unwrap11:.+]] = mul nsw i64 %iv.next4_unwrap, %rows ; CHECK-NEXT: %[[unwrap12:.+]] = add nsw i64 %[[unwrap11]], %"iv'ac.0" ; CHECK-NEXT: %lhs_ki_unwrap = getelementptr inbounds float, float* %lhs_data, i64 %[[unwrap12]] -; CHECK-NEXT: %L_lhs_ki_unwrap = load float, float* %lhs_ki_unwrap, align 8, !tbaa !6, !invariant.group ! +; CHECK-NEXT: %L_lhs_ki_unwrap = load float, float* %lhs_ki_unwrap, align 8, !tbaa !6 ; CHECK-NEXT: %m0diffeL_rhs_kk = fmul fast float %[[a18]], %L_lhs_ki_unwrap ; CHECK-NEXT: %[[unwrap14:.+]] = add nsw i64 %iv.next4_unwrap, %[[unwrap7]] ; CHECK-NEXT: %rhs_kk_unwrap = getelementptr inbounds float, float* %rhs_data, i64 %[[unwrap14]] -; CHECK-NEXT: %L_rhs_kk_unwrap = load float, float* %rhs_kk_unwrap, align 8, !tbaa !6, !invariant.group ! +; CHECK-NEXT: %L_rhs_kk_unwrap = load float, float* %rhs_kk_unwrap, align 8, !tbaa !6 ; CHECK-NEXT: %m1diffeL_lhs_ki = fmul fast float %[[a18]], %L_rhs_kk_unwrap ; CHECK-NEXT: %"rhs_kk'ipg_unwrap" = getelementptr inbounds float, float* %[[drhs_data]], i64 %[[unwrap14]] ; CHECK-NEXT: %[[a19:.+]] = load float, float* %"rhs_kk'ipg_unwrap", align 8 diff --git a/enzyme/test/Enzyme/ReverseMode/mm2.ll b/enzyme/test/Enzyme/ReverseMode/mm2.ll index f239dac2165c0..5d9df93b30b58 100644 --- a/enzyme/test/Enzyme/ReverseMode/mm2.ll +++ b/enzyme/test/Enzyme/ReverseMode/mm2.ll @@ -105,10 +105,10 @@ attributes #3 = { argmemonly nounwind } ; CHECK: for.body5: ; preds = %for.inc44, %for.cond2.preheader ; CHECK-NEXT: %iv1 = phi i64 [ %iv.next2, %for.inc44 ], [ 0, %for.cond2.preheader ] ; CHECK-NEXT: %iv.next2 = add nuw nsw i64 %iv1, 1 -; CHECK-NEXT: %L_lhs_i = load double, double* %lhs_i, align 8, !tbaa !2, !invariant.group !6 +; CHECK-NEXT: %L_lhs_i = load double, double* %lhs_i, align 8, !tbaa !2 ; CHECK-NEXT: %[[a1:.+]] = mul nsw i64 %iv1, %rows ; CHECK-NEXT: %rhs_ij = getelementptr inbounds double, double* %rhs_data, i64 %[[a1]] -; CHECK-NEXT: %L_rhs_ij = load double, double* %rhs_ij, align 8, !tbaa !2, !invariant.group !7 +; CHECK-NEXT: %L_rhs_ij = load double, double* %rhs_ij, align 8, !tbaa !2 ; CHECK-NEXT: %mul = fmul fast double %L_rhs_ij, %L_lhs_i ; CHECK-NEXT: %[[a2:.+]] = add nsw i64 %[[a1]], %iv ; CHECK-NEXT: %out_iji = getelementptr inbounds double, double* %out_data, i64 %[[a2]] @@ -122,10 +122,10 @@ attributes #3 = { argmemonly nounwind } ; CHECK-NEXT: %[[a4:.+]] = mul nsw i64 %iv.next4, %rows ; CHECK-NEXT: %[[a5:.+]] = add nsw i64 %[[a4]], %iv ; CHECK-NEXT: %lhs_ki = getelementptr inbounds double, double* %lhs_data, i64 %[[a5]] -; CHECK-NEXT: %L_lhs_ki = load double, double* %lhs_ki, align 8, !tbaa !2, !invariant.group ![[g8:[0-9]+]] +; CHECK-NEXT: %L_lhs_ki = load double, double* %lhs_ki, align 8, !tbaa !2 ; CHECK-NEXT: %[[a6:.+]] = add nsw i64 %iv.next4, %[[a1]] ; CHECK-NEXT: %rhs_kk = getelementptr inbounds double, double* %rhs_data, i64 %[[a6]] -; CHECK-NEXT: %L_rhs_kk = load double, double* %rhs_kk, align 8, !tbaa !2, !invariant.group ![[g9:[0-9]+]] +; CHECK-NEXT: %L_rhs_kk = load double, double* %rhs_kk, align 8, !tbaa !2 ; CHECK-NEXT: %mul2 = fmul fast double %L_rhs_kk, %L_lhs_ki ; CHECK-NEXT: %add = fadd fast double %[[a3]], %mul2 ; CHECK-NEXT: store double %add, double* %out_iji, align 8, !tbaa !2 @@ -156,10 +156,10 @@ attributes #3 = { argmemonly nounwind } ; CHECK-NEXT: store double 0.000000e+00, double* %[[out_ijiipg_unwrap8]], align 8 ; CHECK-NEXT: %[[a9:.+]] = fadd fast double %[[a16:.+]], %[[a8]] ; CHECK-NEXT: %lhs_i_unwrap = getelementptr inbounds double, double* %lhs_data, i64 %"iv'ac.0" -; CHECK-NEXT: %L_lhs_i_unwrap = load double, double* %lhs_i_unwrap, align 8, !tbaa !2, !invariant.group !6 +; CHECK-NEXT: %L_lhs_i_unwrap = load double, double* %lhs_i_unwrap, align 8, !tbaa !2 ; CHECK-NEXT: %m0diffeL_rhs_ij = fmul fast double %[[a9]], %L_lhs_i_unwrap ; CHECK-NEXT: %rhs_ij_unwrap = getelementptr inbounds double, double* %rhs_data, i64 %[[_unwrap6:.+]] -; CHECK-NEXT: %L_rhs_ij_unwrap = load double, double* %rhs_ij_unwrap, align 8, !tbaa !2, !invariant.group !7 +; CHECK-NEXT: %L_rhs_ij_unwrap = load double, double* %rhs_ij_unwrap, align 8, !tbaa !2 ; CHECK-NEXT: %m1diffeL_lhs_i = fmul fast double %[[a9]], %L_rhs_ij_unwrap ; CHECK-NEXT: %"rhs_ij'ipg_unwrap" = getelementptr inbounds double, double* %"rhs_data'", i64 %[[_unwrap6]] ; CHECK-NEXT: %[[a10:.+]] = load double, double* %"rhs_ij'ipg_unwrap", align 8 @@ -188,11 +188,11 @@ attributes #3 = { argmemonly nounwind } ; CHECK-NEXT: %[[_unwrap9:.+]] = mul nsw i64 %iv.next4_unwrap, %rows ; CHECK-NEXT: %[[_unwrap10:.+]] = add nsw i64 %[[_unwrap9]], %"iv'ac.0" ; CHECK-NEXT: %lhs_ki_unwrap = getelementptr inbounds double, double* %lhs_data, i64 %[[_unwrap10]] -; CHECK-NEXT: %L_lhs_ki_unwrap = load double, double* %lhs_ki_unwrap, align 8, !tbaa !2, !invariant.group ![[g8]] +; CHECK-NEXT: %L_lhs_ki_unwrap = load double, double* %lhs_ki_unwrap, align 8, !tbaa !2 ; CHECK-NEXT: %m0diffeL_rhs_kk = fmul fast double %[[a16]], %L_lhs_ki_unwrap ; CHECK-NEXT: %[[_unwrap11:.+]] = add nsw i64 %iv.next4_unwrap, %[[_unwrap6]] ; CHECK-NEXT: %rhs_kk_unwrap = getelementptr inbounds double, double* %rhs_data, i64 %[[_unwrap11]] -; CHECK-NEXT: %L_rhs_kk_unwrap = load double, double* %rhs_kk_unwrap, align 8, !tbaa !2, !invariant.group ![[g9]] +; CHECK-NEXT: %L_rhs_kk_unwrap = load double, double* %rhs_kk_unwrap, align 8, !tbaa !2 ; CHECK-NEXT: %m1diffeL_lhs_ki = fmul fast double %[[a16]], %L_rhs_kk_unwrap ; CHECK-NEXT: %"rhs_kk'ipg_unwrap" = getelementptr inbounds double, double* %"rhs_data'", i64 %[[_unwrap11]] ; CHECK-NEXT: %[[a17:.+]] = load double, double* %"rhs_kk'ipg_unwrap", align 8 diff --git a/enzyme/test/Enzyme/ReverseMode/mpirep.ll b/enzyme/test/Enzyme/ReverseMode/mpirep.ll index ce8335bd2e3d1..b079e2697ada4 100644 --- a/enzyme/test/Enzyme/ReverseMode/mpirep.ll +++ b/enzyme/test/Enzyme/ReverseMode/mpirep.ll @@ -89,7 +89,7 @@ attributes #1 = { noreturn } ; CHECK-NEXT: %cf_unwrap = uitofp i32 %10 to double ; CHECK-NEXT: %m0diffei16 = fmul fast double %differeturn, %cf_unwrap ; CHECK-NEXT: %i13_unwrap = getelementptr inbounds double, double* %arg, i64 %"iv'ac.0" -; CHECK-NEXT: %i14_unwrap = load double, double* %i13_unwrap, align 8, !invariant.group !0 +; CHECK-NEXT: %i14_unwrap = load double, double* %i13_unwrap, align 8 ; CHECK-NEXT: %m0diffei14 = fmul fast double %m0diffei16, %i14_unwrap ; CHECK-NEXT: %m1diffei14 = fmul fast double %m0diffei16, %i14_unwrap ; CHECK-NEXT: %12 = fadd fast double %m0diffei14, %m1diffei14 diff --git a/enzyme/test/Enzyme/ReverseMode/noaliaspres.ll b/enzyme/test/Enzyme/ReverseMode/noaliaspres.ll index adc0d84d09e0b..c95f660cb3eca 100644 --- a/enzyme/test/Enzyme/ReverseMode/noaliaspres.ll +++ b/enzyme/test/Enzyme/ReverseMode/noaliaspres.ll @@ -56,10 +56,10 @@ exit: ; CHECK-NEXT: %iv.next = add nuw nsw i64 %iv, 1 ; CHECK-NEXT: %cmp = icmp eq i64 %iv.next, 10 ; CHECK-NEXT: %out = load double*, double** %outp, align 8, !alias.scope ![[scope0:[0-9]+]], !noalias ![[scope3:[0-9]+]] -; CHECK-NEXT: %in = load double*, double** %inp, align 8, !alias.scope ![[scope7:[0-9]+]], !noalias ![[scope8:[0-9]+]], !invariant.group ![[scope13:[0-9]+]] -; CHECK-NEXT: %v = load double, double* %in, align 8, !alias.scope ![[scope9:[0-9]+]], !noalias ![[scope10:[0-9]+]], !invariant.group ![[scope14:[0-9]+]] +; CHECK-NEXT: %in = load double*, double** %inp, align 8, !alias.scope ![[scope7:[0-9]+]], !noalias ![[scope8:[0-9]+]] +; CHECK-NEXT: %v = load double, double* %in, align 8, !alias.scope ![[scope9:[0-9]+]], !noalias ![[scope10:[0-9]+]] ; CHECK-NEXT: %v2 = fmul double %v, %v -; CHECK-NEXT: store double %v2, double* %out, align 8, !alias.scope !15, !noalias !18 +; CHECK-NEXT: store double %v2, double* %out, align 8, !alias.scope !13, !noalias !16 ; CHECK-NEXT: br i1 %cmp, label %invertloop, label %loop ; CHECK: invertentry: ; preds = %invertloop @@ -69,16 +69,16 @@ exit: ; CHECK-NEXT: %"iv'ac.0" = phi i64 [ %5, %incinvertloop ], [ 9, %loop ] ; CHECK-NEXT: %"out'il_phi_unwrap" = load double*, double** %"outp'", align 8, !noalias !3 ; CHECK-NEXT: %0 = load double, double* %"out'il_phi_unwrap", align 8, !noalias !12 -; CHECK-NEXT: store double 0.000000e+00, double* %"out'il_phi_unwrap", align 8, !alias.scope !20, !noalias !21 -; CHECK-NEXT: %in_unwrap = load double*, double** %inp, align 8, !alias.scope ![[scope7]], !noalias ![[scope8]], !invariant.group ![[scope13]] -; CHECK-NEXT: %v_unwrap = load double, double* %in_unwrap, align 8, !alias.scope ![[scope9]], !noalias ![[scope10]], !invariant.group ![[scope14]] +; CHECK-NEXT: store double 0.000000e+00, double* %"out'il_phi_unwrap", align 8, !alias.scope !18, !noalias !19 +; CHECK-NEXT: %in_unwrap = load double*, double** %inp, align 8, !alias.scope ![[scope7]], !noalias ![[scope8]] +; CHECK-NEXT: %v_unwrap = load double, double* %in_unwrap, align 8, !alias.scope ![[scope9]], !noalias ![[scope10]] ; CHECK-NEXT: %m0diffev = fmul fast double %0, %v_unwrap ; CHECK-NEXT: %m1diffev = fmul fast double %0, %v_unwrap ; CHECK-NEXT: %1 = fadd fast double %m0diffev, %m1diffev ; CHECK-NEXT: %"in'il_phi_unwrap" = load double*, double** %"inp'", align 8, !noalias ![[scope8]] -; CHECK-NEXT: %2 = load double, double* %"in'il_phi_unwrap", align 8, !alias.scope !22, !noalias !25 +; CHECK-NEXT: %2 = load double, double* %"in'il_phi_unwrap", align 8, !alias.scope !20, !noalias !23 ; CHECK-NEXT: %3 = fadd fast double %2, %1 -; CHECK-NEXT: store double %3, double* %"in'il_phi_unwrap", align 8, !alias.scope !22, !noalias !25 +; CHECK-NEXT: store double %3, double* %"in'il_phi_unwrap", align 8, !alias.scope !20, !noalias !23 ; CHECK-NEXT: %4 = icmp eq i64 %"iv'ac.0", 0 ; CHECK-NEXT: br i1 %4, label %invertentry, label %incinvertloop diff --git a/enzyme/test/Enzyme/ReverseMode/ompsqloop.ll b/enzyme/test/Enzyme/ReverseMode/ompsqloop.ll index 82eac4d20cfe4..e19ac28586fd8 100644 --- a/enzyme/test/Enzyme/ReverseMode/ompsqloop.ll +++ b/enzyme/test/Enzyme/ReverseMode/ompsqloop.ll @@ -179,7 +179,7 @@ attributes #1 = { argmemonly } ; CHECK: omp.precond.then: ; preds = %entry ; CHECK-NEXT: store i32 0, i32* %.omp.is_last, align 4, !tbaa !7 -; CHECK-NEXT: %0 = load i32, i32* %.global_tid., align 4, !tbaa !7, !invariant.group ![[g15:[0-9]+]] +; CHECK-NEXT: %0 = load i32, i32* %.global_tid., align 4, !tbaa !7 ; CHECK-NEXT: store i64 0, i64* %.omp.lb_smpl ; CHECK-NEXT: store i64 %sub4, i64* %.omp.ub_smpl ; CHECK-NEXT: store i64 1, i64* %.omp.stride_smpl @@ -196,7 +196,7 @@ attributes #1 = { argmemonly } ; CHECK-NEXT: ret void ; CHECK: invertomp.precond.then: -; CHECK-NEXT: %_unwrap = load i32, i32* %.global_tid., align 4, !tbaa !7, !invariant.group ![[g15]] +; CHECK-NEXT: %_unwrap = load i32, i32* %.global_tid., align 4, !tbaa !7 ; CHECK-NEXT: call void @__kmpc_for_static_fini(%struct.ident_t* @1, i32 %_unwrap) ; CHECK-NEXT: br label %invertentry diff --git a/enzyme/test/Enzyme/ReverseMode/ompsqloop2.ll b/enzyme/test/Enzyme/ReverseMode/ompsqloop2.ll index 334eaf7f4049c..408387e38dbb0 100644 --- a/enzyme/test/Enzyme/ReverseMode/ompsqloop2.ll +++ b/enzyme/test/Enzyme/ReverseMode/ompsqloop2.ll @@ -138,7 +138,7 @@ declare !callback !13 void @__kmpc_fork_call(%struct.ident_t*, i32, void (i32*, ; CHECK-NEXT: br i1 %[[cmp]], label %invertomp.inner.for.body_phirc, label %invertomp.inner.for.body_phimerge ; CHECK: invertomp.inner.for.body_phirc: -; CHECK-NEXT: %"i9'ipl_unwrap" = load double*, double** %"e_new'", align 8, !tbaa !{{[0-9]+}}, !invariant.group ! +; CHECK-NEXT: %"i9'ipl_unwrap" = load double*, double** %"e_new'", align 8, !tbaa !{{[0-9]+}} ; CHECK-NEXT: br label %invertomp.inner.for.body_phimerge ; CHECK: invertomp.inner.for.body_phimerge: diff --git a/enzyme/test/Enzyme/ReverseMode/ompsqloopoutofplace.ll b/enzyme/test/Enzyme/ReverseMode/ompsqloopoutofplace.ll index c56a9f426899d..aafa8641a9232 100644 --- a/enzyme/test/Enzyme/ReverseMode/ompsqloopoutofplace.ll +++ b/enzyme/test/Enzyme/ReverseMode/ompsqloopoutofplace.ll @@ -142,7 +142,7 @@ attributes #1 = { argmemonly } ; CHECK-NEXT: ret void ; CHECK: invertomp.precond.then: ; preds = %invertomp.inner.for.body, %omp.precond.then -; CHECK-NEXT: %_unwrap = load i32, i32* %.global_tid., align 4, !tbaa !7, !invariant.group ! +; CHECK-NEXT: %_unwrap = load i32, i32* %.global_tid., align 4, !tbaa !7 ; CHECK-NEXT: call void @__kmpc_for_static_fini(%struct.ident_t* @1, i32 %_unwrap) ; CHECK-NEXT: br label %invertentry @@ -154,7 +154,7 @@ attributes #1 = { argmemonly } ; CHECK-NEXT: %1 = load double, double* %"outidx'ipg_unwrap", align 8 ; CHECK-NEXT: store double 0.000000e+00, double* %"outidx'ipg_unwrap", align 8 ; CHECK-NEXT: %arrayidx_unwrap = getelementptr inbounds double, double* %tmp, i64 %_unwrap3 -; CHECK-NEXT: %_unwrap4 = load double, double* %arrayidx_unwrap, align 8, !tbaa !9, !invariant.group ! +; CHECK-NEXT: %_unwrap4 = load double, double* %arrayidx_unwrap, align 8, !tbaa !9 ; CHECK-NEXT: %2 = call fast double @sqrt(double %_unwrap4) ; CHECK-NEXT: %3 = fmul fast double 5.000000e-01, %1 ; CHECK-NEXT: %4 = fdiv fast double %3, %2 diff --git a/enzyme/test/Enzyme/ReverseMode/remat_outside.ll b/enzyme/test/Enzyme/ReverseMode/remat_outside.ll index e1df961ef8980..d4667d46f9fd4 100644 --- a/enzyme/test/Enzyme/ReverseMode/remat_outside.ll +++ b/enzyme/test/Enzyme/ReverseMode/remat_outside.ll @@ -71,7 +71,7 @@ declare dso_local double @_Z17__enzyme_autodiffPFddiEz(double (double, i32)*, .. ; CHECK-NEXT: br i1 %i18, label %bb12, label %bb14 ; CHECK: bb12: ; preds = %bb14 -; CHECK-NEXT: %i13 = load double, double* %i11, align 8, !invariant.group !0 +; CHECK-NEXT: %i13 = load double, double* %i11, align 8 ; CHECK-NEXT: tail call void @free(i8* nonnull %i10) ; CHECK-NEXT: %i21 = fsub double %i13, %i9 ; CHECK-NEXT: %i22 = fcmp ogt double %i21, 1.000000e-04 diff --git a/enzyme/test/Enzyme/ReverseMode/sumnllist.ll b/enzyme/test/Enzyme/ReverseMode/sumnllist.ll index 5b8fca9281d7a..73f79f0565a32 100644 --- a/enzyme/test/Enzyme/ReverseMode/sumnllist.ll +++ b/enzyme/test/Enzyme/ReverseMode/sumnllist.ll @@ -170,7 +170,7 @@ attributes #4 = { nounwind } ; SHARED-NEXT: %[[lstructiv:.+]] = load %struct.n*, %struct.n** %[[toload]], align 8, !invariant.group ; //NOTE this should be LICM'd outside this loop (but LICM doesn't handle invariant group at the momeny :'( ) ; SHARED-NEXT: %"values'ipg_unwrap" = getelementptr inbounds %struct.n, %struct.n* %[[lstructiv]], i64 0, i32 0 -; SHARED-NEXT: %[[loadediv:.+]] = load double*, double** %"values'ipg_unwrap", align 8, !tbaa !2, !invariant.group +; SHARED-NEXT: %[[loadediv:.+]] = load double*, double** %"values'ipg_unwrap", align 8, !tbaa !2 ; SHARED-NEXT: %[[arrayidxipg:.+]] = getelementptr inbounds double, double* %[[loadediv]], i64 %[[mantivar]] ; SHARED-NEXT: %[[arrayload:.+]] = load double, double* %[[arrayidxipg]] ; LLVM13-NEXT: %[[arraytostore:.+]] = fadd fast double %[[arrayload]], %differeturn diff --git a/enzyme/test/Enzyme/ReverseMode/threeexit-unopt.ll b/enzyme/test/Enzyme/ReverseMode/threeexit-unopt.ll index acfd338ef3597..b95c8cc98e6f7 100644 --- a/enzyme/test/Enzyme/ReverseMode/threeexit-unopt.ll +++ b/enzyme/test/Enzyme/ReverseMode/threeexit-unopt.ll @@ -93,7 +93,7 @@ attributes #4 = { nounwind } ; CHECK-NEXT: %iv = phi i64 [ %iv.next, %for.inc ], [ 0, %entry ] ; CHECK-NEXT: %iv.next = add nuw nsw i64 %iv, 1 ; CHECK-NEXT: %arrayidx = getelementptr inbounds double, double* %in, i64 %iv -; CHECK-NEXT: %0 = load double, double* %arrayidx, align 8, !tbaa !2, !invariant.group !6 +; CHECK-NEXT: %0 = load double, double* %arrayidx, align 8, !tbaa !2 ; CHECK-NEXT: %cmp1 = fcmp fast ogt double %0, 1.000000e+00 ; CHECK-NEXT: br i1 %cmp1, label %if.then, label %if.else @@ -131,7 +131,7 @@ attributes #4 = { nounwind } ; CHECK-NEXT: %2 = load double, double* %"arrayidx5'ipg_unwrap", align 8 ; CHECK-NEXT: store double 0.000000e+00, double* %"arrayidx5'ipg_unwrap", align 8 ; CHECK-NEXT: %arrayidx_unwrap = getelementptr inbounds double, double* %in, i64 %"iv'ac.0" -; CHECK-NEXT: %_unwrap = load double, double* %arrayidx_unwrap, align 8, !tbaa !2, !invariant.group !6 +; CHECK-NEXT: %_unwrap = load double, double* %arrayidx_unwrap, align 8, !tbaa !2 ; CHECK-NEXT: %cmp1_unwrap = fcmp fast ogt double %_unwrap, 1.000000e+00 ; CHECK-NEXT: %cmp8_unwrap = fcmp fast ogt double %_unwrap, 0.000000e+00 ; CHECK-NEXT: %anot1_ = xor i1 %cmp1_unwrap, true diff --git a/enzyme/test/Integration/ReverseMode/remat2.cpp b/enzyme/test/Integration/ReverseMode/remat2.cpp new file mode 100644 index 0000000000000..392416b163371 --- /dev/null +++ b/enzyme/test/Integration/ReverseMode/remat2.cpp @@ -0,0 +1,59 @@ +// RUN: if [ %llvmver -ge 12 ]; then %clang -O0 %s -S -emit-llvm -o - %loadClangEnzyme | %lli - ; fi +// RUN: if [ %llvmver -ge 12 ]; then %clang -O1 %s -S -emit-llvm -o - %loadClangEnzyme | %lli - ; fi +// RUN: if [ %llvmver -ge 12 ]; then %clang -O2 %s -S -emit-llvm -o - %loadClangEnzyme | %lli - ; fi +// RUN: if [ %llvmver -ge 12 ]; then %clang -O3 %s -S -emit-llvm -o - %loadClangEnzyme | %lli - ; fi +// RUN: if [ %llvmver -ge 12 ]; then %clang -O0 %s -S -emit-llvm -o - %loadClangEnzyme -mllvm -enzyme-inline=1 -S | %lli - ; fi +// RUN: if [ %llvmver -ge 12 ]; then %clang -O1 %s -S -emit-llvm -o - %loadClangEnzyme -mllvm -enzyme-inline=1 -S | %lli - ; fi +// RUN: if [ %llvmver -ge 12 ]; then %clang -O2 %s -S -emit-llvm -o - %loadClangEnzyme -mllvm -enzyme-inline=1 -S | %lli - ; fi +// RUN: if [ %llvmver -ge 12 ]; then %clang -O3 %s -S -emit-llvm -o - %loadClangEnzyme -mllvm -enzyme-inline=1 -S | %lli - ; fi + + +#include +#include + +#include + +#include "test_utils.h" + + + +#include + +#define DIM 3 + +void __enzyme_autodiff(void*, ...); + +double symmetry_function_atomic(double const *coords) { + double res = 0; + for (int jj = 0; jj < 2; ++jj) + { + // Compute rij + double rij[DIM]; + double v = coords[jj]; + for (int dim = 0; dim < DIM; ++dim) { + rij[dim] = v; + } + + res += rij[0] * rij[0]; + } + return res; +} + +__attribute__((noinline)) +void f(double* coords, double* forces) { + __enzyme_autodiff((void*)symmetry_function_atomic, + coords, forces); +} + +int main() { + double coords[2] = {3.0, 5.0}; + double forces[2] = {0.0, 0.0}; + +f(coords, forces); + + printf("%f\n", forces[0]); + printf("%f\n", forces[1]); + APPROX_EQ(forces[0], 6.0, 1e-10); + APPROX_EQ(forces[1], 10.0, 1e-10); + return 0; +}