Skip to content

Commit ea74bd1

Browse files
committed
fix julia
1 parent d04d3e4 commit ea74bd1

File tree

8 files changed

+25
-132
lines changed

8 files changed

+25
-132
lines changed

.github/workflows/julia.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ jobs:
4444
run: |
4545
mkdir build
4646
cd build
47+
cmake --version
48+
ls /home/runner/work/Enzyme/Enzyme/enzyme/Enzyme/
4749
cmake -DLLVM_DIR=../contrib/usr/lib/cmake/llvm -DLLVM_EXTERNAL_LIT=../contrib/usr/tools/lit/lit.py ../enzyme
4850
make -j
4951
- name: "Julia tests"

enzyme/Enzyme/ActiveVariable.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
#include "llvm/IR/Type.h"
2828
#include "llvm/IR/Value.h"
2929

30+
#include "llvm/Support/raw_ostream.h"
3031

3132
#include "ActiveVariable.h"
3233
#include "Utils.h"

enzyme/Enzyme/CMakeLists.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@
22
# set(LLVM_LINK_COMPONENTS Core Support)
33
#endif()
44

5-
file(GLOB ENZYME_SRC
5+
file(GLOB ENZYME_SRC RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
66
"*.cpp"
77
)
88

99
list(APPEND ENZYME_SRC SCEV/ScalarEvolutionExpander.cpp)
1010

11+
message("found enzyme sources " ${ENZYME_SRC})
12+
1113
if (${LLVM_VERSION_MAJOR} LESS 8)
1214
add_llvm_loadable_module( LLVMEnzyme-${LLVM_VERSION_MAJOR}
1315
${ENZYME_SRC}

enzyme/Enzyme/Enzyme.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333

3434
#include "llvm/Support/Debug.h"
3535
#include "llvm/Transforms/Scalar.h"
36-
#include "llvm/Transforms/Utils.h"
3736

3837
#include "llvm/Analysis/GlobalsModRef.h"
3938
#include "llvm/Analysis/ScalarEvolution.h"
@@ -222,7 +221,6 @@ class Enzyme : public FunctionPass {
222221
AU.addRequired<TargetLibraryInfoWrapperPass>();
223222
AU.addRequired<AAResultsWrapperPass>();
224223
AU.addRequired<GlobalsAAWrapperPass>();
225-
AU.addRequiredID(LoopSimplifyID);
226224
//AU.addRequiredID(LCSSAID);
227225

228226
AU.addRequired<LoopInfoWrapperPass>();

enzyme/Enzyme/LibraryFuncs.h

Lines changed: 5 additions & 109 deletions
Original file line numberDiff line numberDiff line change
@@ -20,114 +20,6 @@
2020

2121
#include "llvm/Analysis/TargetLibraryInfo.h"
2222

23-
/*
24-
//For updating below one should read MemoryBuiltins.cpp, TargetLibraryInfo.cpp
25-
static inline
26-
bool mapAllocationToDeallocation(const llvm::LibFunc libfunc, const llvm::TargetLibraryInfo &TLI) {
27-
28-
29-
30-
// void operator delete[](void*);
31-
case LibFunc_msvc_delete_array_ptr32:
32-
// void operator delete[](void*);
33-
case LibFunc_msvc_delete_array_ptr64:
34-
// void operator delete(void*);
35-
case LibFunc_msvc_delete_ptr32:
36-
// void operator delete(void*);
37-
case LibFunc_msvc_delete_ptr64:
38-
return (NumParams == 1 && FTy.getParamType(0)->isPointerTy());
39-
40-
// void operator delete[](void*, unsigned long);
41-
case LibFunc_ZdaPvm:
42-
// void operator delete(void*, nothrow);
43-
case LibFunc_ZdlPvRKSt9nothrow_t:
44-
// void operator delete(void*, unsigned int);
45-
case LibFunc_ZdlPvj:
46-
// void operator delete(void*, unsigned long);
47-
case LibFunc_ZdlPvm:
48-
// void operator delete(void*, align_val_t)
49-
case LibFunc_ZdlPvSt11align_val_t:
50-
// void operator delete[](void*, align_val_t)
51-
case LibFunc_ZdaPvSt11align_val_t:
52-
// void operator delete[](void*, unsigned int);
53-
case LibFunc_msvc_delete_array_ptr32_int:
54-
// void operator delete[](void*, nothrow);
55-
case LibFunc_msvc_delete_array_ptr32_nothrow:
56-
// void operator delete[](void*, unsigned long long);
57-
case LibFunc_msvc_delete_array_ptr64_longlong:
58-
// void operator delete[](void*, nothrow);
59-
case LibFunc_msvc_delete_array_ptr64_nothrow:
60-
// void operator delete(void*, unsigned int);
61-
case LibFunc_msvc_delete_ptr32_int:
62-
// void operator delete(void*, nothrow);
63-
case LibFunc_msvc_delete_ptr32_nothrow:
64-
// void operator delete(void*, unsigned long long);
65-
case LibFunc_msvc_delete_ptr64_longlong:
66-
// void operator delete(void*, nothrow);
67-
case LibFunc_msvc_delete_ptr64_nothrow:
68-
return (NumParams == 2 && FTy.getParamType(0)->isPointerTy());
69-
70-
// void operator delete(void*, align_val_t, nothrow)
71-
case LibFunc_ZdlPvSt11align_val_tRKSt9nothrow_t:
72-
// void operator delete[](void*, align_val_t, nothrow)
73-
case LibFunc_ZdaPvSt11align_val_tRKSt9nothrow_t:
74-
75-
switch (libfunc) {
76-
case LibFunc_malloc: // malloc(unsigned int);
77-
case LibFunc_valloc: // valloc(unsigned int);
78-
return LibFunc_free;
79-
80-
case LibFunc_Znwj: // new(unsigned int);
81-
return LibFunc_ZdlPv; // void operator delete(void*);
82-
83-
case LibFunc_ZnwjRKSt9nothrow_t: // new(unsigned int, nothrow);
84-
case LibFunc_ZnwjSt11align_val_t: // new(unsigned int, align_val_t)
85-
case LibFunc_ZnwjSt11align_val_tRKSt9nothrow_t: // new(unsigned int, align_val_t, nothrow)
86-
87-
case LibFunc_Znwm: // new(unsigned long);
88-
case LibFunc_ZnwmRKSt9nothrow_t: // new(unsigned long, nothrow);
89-
case LibFunc_ZnwmSt11align_val_t: // new(unsigned long, align_val_t)
90-
case LibFunc_ZnwmSt11align_val_tRKSt9nothrow_t: // new(unsigned long, align_val_t, nothrow)
91-
92-
case LibFunc_Znaj: // new[](unsigned int);
93-
return LibFunc_ZdaPv; // void operator delete[](void*);
94-
95-
case LibFunc_ZnajRKSt9nothrow_t: // new[](unsigned int, nothrow);
96-
return LibFunc_ZdaPvRKSt9nothrow_t; // void operator delete[](void*, nothrow);
97-
98-
case LibFunc_ZnajSt11align_val_t: // new[](unsigned int, align_val_t)
99-
100-
return LibFunc_ZdaPvj; // void operator delete[](void*, unsigned int);
101-
102-
case LibFunc_ZnajSt11align_val_tRKSt9nothrow_t: // new[](unsigned int, align_val_t, nothrow)
103-
104-
105-
case LibFunc_Znam: // new[](unsigned long);
106-
case LibFunc_ZnamRKSt9nothrow_t: // new[](unsigned long, nothrow);
107-
case LibFunc_ZnamSt11align_val_t: // new[](unsigned long, align_val_t)
108-
case LibFunc_ZnamSt11align_val_tRKSt9nothrow_t: // new[](unsigned long, align_val_t, nothrow)
109-
110-
case LibFunc_msvc_new_int: // new(unsigned int);
111-
case LibFunc_msvc_new_int_nothrow: // new(unsigned int, nothrow);
112-
case LibFunc_msvc_new_longlong: // new(unsigned long long);
113-
case LibFunc_msvc_new_longlong_nothrow: // new(unsigned long long, nothrow);
114-
case LibFunc_msvc_new_array_int: // new[](unsigned int);
115-
case LibFunc_msvc_new_array_int_nothrow: // new[](unsigned int, nothrow);
116-
case LibFunc_msvc_new_array_longlong: // new[](unsigned long long);
117-
case LibFunc_msvc_new_array_longlong_nothrow: // new[](unsigned long long, nothrow);
118-
119-
//TODO strdup, strndup
120-
121-
//TODO call, realloc, reallocf
122-
123-
//TODO (perhaps) posix_memalign
124-
TLI.get
125-
return true;
126-
default:
127-
llvm_unreachable("unknown allocation function to find deallocation function for");
128-
return false;
129-
}
130-
*/
13123

13224
//For updating below one should read MemoryBuiltins.cpp, TargetLibraryInfo.cpp
13325
static inline
@@ -141,8 +33,10 @@ bool isAllocationFunction(const llvm::Function &F, const llvm::TargetLibraryInfo
14133

14234
case LibFunc_Znwj: // new(unsigned int);
14335
case LibFunc_ZnwjRKSt9nothrow_t: // new(unsigned int, nothrow);
36+
#if LLVM_VERSION_MAJOR > 6
14437
case LibFunc_ZnwjSt11align_val_t: // new(unsigned int, align_val_t)
14538
case LibFunc_ZnwjSt11align_val_tRKSt9nothrow_t: // new(unsigned int, align_val_t, nothrow)
39+
#endif
14640

14741
case LibFunc_Znwm: // new(unsigned long);
14842
case LibFunc_ZnwmRKSt9nothrow_t: // new(unsigned long, nothrow);
@@ -268,8 +162,10 @@ CallInst* freeKnownAllocation(llvm::IRBuilder <>& builder, llvm::Value* tofree,
268162

269163
case LibFunc_Znwj: // new(unsigned int);
270164
case LibFunc_ZnwjRKSt9nothrow_t: // new(unsigned int, nothrow);
165+
#if LLVM_VERSION_MAJOR > 6
271166
case LibFunc_ZnwjSt11align_val_t: // new(unsigned int, align_val_t)
272167
case LibFunc_ZnwjSt11align_val_tRKSt9nothrow_t: // new(unsigned int, align_val_t, nothrow)
168+
#endif
273169

274170
case LibFunc_Znwm: // new(unsigned long);
275171
case LibFunc_ZnwmRKSt9nothrow_t: // new(unsigned long, nothrow);
@@ -320,4 +216,4 @@ CallInst* freeKnownAllocation(llvm::IRBuilder <>& builder, llvm::Value* tofree,
320216
return freecall;
321217
}
322218

323-
#endif
219+
#endif

enzyme/Enzyme/Utils.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,19 @@
1818
#ifndef ENZYME_UTILS_H
1919
#define ENZYME_UTILS_H
2020

21+
#include "llvm/ADT/SmallPtrSet.h"
22+
2123
#include "llvm/IR/Function.h"
22-
#include "llvm/IR/Operator.h"
24+
#include "llvm/IR/IntrinsicInst.h"
2325
#include "llvm/IR/Module.h"
26+
#include "llvm/IR/Operator.h"
2427
#include "llvm/IR/Type.h"
25-
#include "llvm/ADT/SmallPtrSet.h"
26-
#include "llvm/IR/IntrinsicInst.h"
2728

2829
#include "llvm/IR/Function.h"
2930
#include "llvm/IR/IntrinsicInst.h"
3031

3132
#include "llvm/Support/Casting.h"
33+
#include "llvm/Support/raw_ostream.h"
3234

3335
static inline llvm::FastMathFlags getFast() {
3436
llvm::FastMathFlags f;

enzyme/test/Enzyme/memcpy-flt.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ attributes #3 = { nounwind }
6666
; CHECK-NEXT: br i1 %0, label %for.end, label %for.body
6767

6868
; CHECK: for.body:
69-
; CHECK-NEXT: %idx = phi i64 [ %idx.next, %for.body ], [ 0, %entry ]
69+
; CHECK-NEXT: %idx = phi i64 [ 0, %entry ], [ %idx.next, %for.body ]
7070
; CHECK-NEXT: %dst.i = getelementptr double, double* %dst, i64 %idx
7171
; CHECK-NEXT: %dst.i.l = load double, double* %dst.i, align 8
7272
; CHECK-NEXT: store double 0.000000e+00, double* %dst.i, align 8

enzyme/test/Enzyme/sumwithbreak.ll

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
; RUN: opt < %s %loadEnzyme -enzyme -enzyme_preopt=false -mem2reg -instcombine -correlated-propagation -adce -instcombine -simplifycfg -early-cse -simplifycfg -loop-unroll -instcombine -simplifycfg -gvn -S | FileCheck %s
1+
; RUN: opt < %s %loadEnzyme -enzyme -enzyme_preopt=false -mem2reg -instcombine -correlated-propagation -adce -instcombine -simplifycfg -early-cse -simplifycfg -loop-unroll -instcombine -simplifycfg -gvn -jump-threading -instcombine -S | FileCheck %s
22

33
; Function Attrs: noinline nounwind uwtable
44
define dso_local double @f(double* nocapture readonly %x, i64 %n) #0 {
@@ -50,51 +50,43 @@ attributes #0 = { noinline nounwind uwtable }
5050
; CHECK-NEXT: %iv = phi i64 [ %iv.next, %if.end ], [ 0, %entry ]
5151
; CHECK-NEXT: %data.016 = phi double [ %add5, %if.end ], [ 0.000000e+00, %entry ]
5252
; CHECK-NEXT: %cmp2 = fcmp fast ogt double %data.016, 1.000000e+01
53-
; CHECK-NEXT: br i1 %cmp2, label %invertif.then, label %if.end
53+
; CHECK-NEXT: br i1 %cmp2, label %[[invertifthen:.+]], label %if.end
5454

5555
; CHECK: if.end: ; preds = %for.body
5656
; CHECK-NEXT: %iv.next = add nuw i64 %iv, 1
5757
; CHECK-NEXT: %arrayidx4 = getelementptr inbounds double, double* %x, i64 %iv
5858
; CHECK-NEXT: %0 = load double, double* %arrayidx4, align 8
5959
; CHECK-NEXT: %add5 = fadd fast double %0, %data.016
6060
; CHECK-NEXT: %cmp = icmp eq i64 %iv, %n
61-
; CHECK-NEXT: br i1 %cmp, label %loopMerge.peel, label %for.body
61+
; CHECK-NEXT: br i1 %cmp, label %invertif.end.peel, label %for.body
6262

6363
; CHECK: invertentry:
6464
; CHECK-NEXT: ret {} undef
6565

66-
; CHECK: invertif.then:
66+
; CHECK: [[invertifthen]]:
6767
; CHECK-NEXT: %"arrayidx'ipg" = getelementptr double, double* %"x'", i64 %n
6868
; CHECK-NEXT: %[[loadit:.+]] = load double, double* %"arrayidx'ipg", align 8
6969
; CHECK-NEXT: %[[tostoreit:.+]] = fadd fast double %[[loadit]], %differeturn
7070
; CHECK-NEXT: store double %[[tostoreit]], double* %"arrayidx'ipg", align 8
71-
; CHECK-NEXT: br label %loopMerge.peel
72-
73-
; CHECK: loopMerge.peel:
74-
; CHECK-NEXT: %"add5'de.1" = phi double [ 0.000000e+00, %invertif.then ], [ %differeturn, %if.end ]
75-
; CHECK-NEXT: %"data.016'de.1" = phi double [ %differeturn, %invertif.then ], [ 0.000000e+00, %if.end ]
76-
; CHECK-NEXT: br i1 %cmp2, label %invertfor.body.peel, label %invertif.end.peel
71+
; CHECK-NEXT: br label %invertfor.body.peel
7772

7873
; CHECK: invertif.end.peel:
79-
; CHECK-NEXT: %[[diffehere:.+]] = fadd fast double %"data.016'de.1", %"add5'de.1"
8074
; CHECK-NEXT: %"arrayidx4'ipg.peel" = getelementptr double, double* %"x'", i64 %iv
8175
; CHECK-NEXT: %[[loaditp:.+]] = load double, double* %"arrayidx4'ipg.peel", align 8
82-
; CHECK-NEXT: %[[tostoreitp:.+]] = fadd fast double %[[loaditp]], %"add5'de.1"
76+
; CHECK-NEXT: %[[tostoreitp:.+]] = fadd fast double %[[loaditp]], %differeturn
8377
; CHECK-NEXT: store double %[[tostoreitp]], double* %"arrayidx4'ipg.peel", align 8
78+
; CHECK-NEXT: br label %invertfor.body.peel
8479

8580
; CHECK: invertfor.body.peel:
86-
; CHECK-NEXT: %"add5'de.0.peel" = phi double [ %"add5'de.1", %loopMerge.peel ], [ 0.000000e+00, %invertif.end.peel ]
87-
; CHECK-NEXT: %"data.016'de.0.peel" = phi double [ %"data.016'de.1", %loopMerge.peel ], [ %[[diffehere]], %invertif.end.peel ]
8881
; CHECK-NEXT: %[[donecmp:.+]] = icmp eq i64 %iv, 0
89-
; CHECK-NEXT: %[[dthere:.+]] = fadd fast double %"add5'de.0.peel", %"data.016'de.0.peel"
9082
; CHECK-NEXT: br i1 %[[donecmp]], label %invertentry, label %loopMerge
9183

9284
; CHECK: loopMerge:
9385
; CHECK-NEXT: %"iv'phi.in" = phi i64 [ %"iv'phi", %loopMerge ], [ %iv, %invertfor.body.peel ]
9486
; CHECK-NEXT: %"iv'phi" = add i64 %"iv'phi.in", -1
9587
; CHECK-NEXT: %"arrayidx4'ipg" = getelementptr double, double* %"x'", i64 %"iv'phi"
9688
; CHECK-NEXT: %[[ldhere:.+]] = load double, double* %"arrayidx4'ipg", align 8
97-
; CHECK-NEXT: %[[tshere:.+]] = fadd fast double %[[ldhere]], %[[dthere]]
89+
; CHECK-NEXT: %[[tshere:.+]] = fadd fast double %[[ldhere]], %differeturn
9890
; CHECK-NEXT: store double %[[tshere]], double* %"arrayidx4'ipg", align 8
9991
; CHECK-NEXT: %[[icmp:.+]] = icmp eq i64 %"iv'phi", 0
10092
; CHECK-NEXT: br i1 %[[icmp]], label %invertentry, label %loopMerge

0 commit comments

Comments
 (0)