Skip to content

Commit e3c03d6

Browse files
vchuravygbaraldipchintalapudi
committed
Fix tests and static analyzer for LLVM 15
Co-authored-by: Gabriel Baraldi <[email protected]> Co-authored-by: Prem Chintalapudi <[email protected]>
1 parent 78f25cd commit e3c03d6

File tree

9 files changed

+58
-31
lines changed

9 files changed

+58
-31
lines changed

src/llvm-alloc-opt.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1138,9 +1138,12 @@ void Optimizer::splitOnStack(CallInst *orig_inst)
11381138
ref->setOrdering(AtomicOrdering::NotAtomic);
11391139
operands.push_back(ref);
11401140
}
1141+
#ifndef __clang_analyzer__
1142+
// FIXME: SA finds "Called C++ object pointer is null" inside the LLVM code.
11411143
auto new_call = builder.CreateCall(pass.gc_preserve_begin_func, operands);
11421144
new_call->takeName(call);
11431145
call->replaceAllUsesWith(new_call);
1146+
#endif
11441147
call->eraseFromParent();
11451148
return;
11461149
}

src/llvm-late-gc-lowering.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1262,6 +1262,7 @@ static bool isLoadFromConstGV(LoadInst *LI, bool &task_local, PhiSet *seen)
12621262
// We only emit single slot GV in codegen
12631263
// but LLVM global merging can change the pointer operands to GEPs/bitcasts
12641264
auto load_base = LI->getPointerOperand()->stripInBoundsOffsets();
1265+
assert(load_base); // Static analyzer
12651266
auto gv = dyn_cast<GlobalVariable>(load_base);
12661267
if (isTBAA(LI->getMetadata(LLVMContext::MD_tbaa),
12671268
{"jtbaa_immut", "jtbaa_const", "jtbaa_datatype"})) {

src/llvm-lower-handlers.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
#include <llvm/ADT/DepthFirstIterator.h>
1010
#include <llvm/ADT/Statistic.h>
11+
#include <llvm/ADT/Triple.h>
1112
#include <llvm/Analysis/CFG.h>
1213
#include <llvm/IR/BasicBlock.h>
1314
#include <llvm/IR/Constants.h>

src/llvm-multiversioning.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,13 @@
1414
#include <llvm/Pass.h>
1515
#include <llvm/ADT/BitVector.h>
1616
#include <llvm/ADT/Statistic.h>
17+
#include <llvm/ADT/Triple.h>
1718
#include <llvm/IR/Module.h>
1819
#include <llvm/IR/LegacyPassManager.h>
1920
#include <llvm/IR/Function.h>
2021
#include <llvm/IR/Instructions.h>
2122
#include <llvm/IR/Constants.h>
23+
#include <llvm/IR/Dominators.h>
2224
#include <llvm/IR/LLVMContext.h>
2325
#include <llvm/Analysis/LoopInfo.h>
2426
#include <llvm/Analysis/CallGraph.h>
@@ -779,6 +781,7 @@ static Value *rewrite_inst_use(const Stack& stack, Type *T_size, Value *replace,
779781
replace = inst;
780782
continue;
781783
}
784+
assert(val);
782785
unsigned nargs = val->getNumOperands();
783786
args.resize(nargs);
784787
for (unsigned j = 0; j < nargs; j++) {

src/llvm-ptls.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include <llvm-c/Types.h>
1010

1111
#include <llvm/Pass.h>
12+
#include <llvm/ADT/Triple.h>
1213
#include <llvm/IR/Module.h>
1314
#include <llvm/IR/LegacyPassManager.h>
1415
#include <llvm/IR/Function.h>
@@ -161,6 +162,7 @@ void LowerPTLS::fix_pgcstack_use(CallInst *pgcstack, Function *pgcstack_getter,
161162
SmallVector<uint32_t, 2> Weights{9, 1};
162163
TerminatorInst *fastTerm;
163164
TerminatorInst *slowTerm;
165+
assert(pgcstack->getType()); // Static analyzer
164166
auto cmp = new ICmpInst(phi, CmpInst::ICMP_NE, pgcstack, Constant::getNullValue(pgcstack->getType()));
165167
SplitBlockAndInsertIfThenElse(cmp, phi, &fastTerm, &slowTerm,
166168
MDB.createBranchWeights(Weights));

test/clangsa/MissingRoots.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,9 @@ void assoc_exact_broken(jl_value_t **args, size_t n, int8_t offs, size_t world)
352352
}
353353
*/
354354

355+
// declare
356+
jl_typemap_level_t *jl_new_typemap_level(void);
357+
355358
void assoc_exact_ok(jl_value_t *args1, jl_value_t **args, size_t n, int8_t offs, size_t world) {
356359
jl_typemap_level_t *cache = jl_new_typemap_level();
357360
JL_GC_PUSH1(&cache);

test/cmdlineargs.jl

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -188,10 +188,12 @@ let exename = `$(Base.julia_cmd()) --startup-file=no --color=no`
188188
@test contains(v[2], r"enable-tail-merge + = 1")
189189
@test isempty(v[3])
190190
end
191-
@testset let v = readchomperrors(setenv(`$exename -e 0`, "JULIA_LLVM_ARGS" => "-print-options -enable-tail-merge=1 -enable-tail-merge=1", "HOME" => homedir()))
192-
@test !v[1]
193-
@test isempty(v[2])
194-
@test v[3] == "julia: for the --enable-tail-merge option: may only occur zero or one times!"
191+
if Base.libllvm_version < v"15" #LLVM over 15 doesn't care for multiple options
192+
@testset let v = readchomperrors(setenv(`$exename -e 0`, "JULIA_LLVM_ARGS" => "-print-options -enable-tail-merge=1 -enable-tail-merge=1", "HOME" => homedir()))
193+
@test !v[1]
194+
@test isempty(v[2])
195+
@test v[3] == "julia: for the --enable-tail-merge option: may only occur zero or one times!"
196+
end
195197
end
196198
end
197199

test/llvmpasses/pipeline-o2-broadcast.jl

Lines changed: 36 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -9,26 +9,30 @@ include(joinpath("..", "testhelpers", "llvmpasses.jl"))
99

1010
# COM: Float32
1111
# CHECK: @japi1_prod_v_vT
12-
# CHECK: load <[[VSCALE:(vscale x )?]][[VEC_FACTOR:[0-9]+]] x float>
13-
# CHECK: fmul <[[VSCALE]][[VEC_FACTOR]] x float>
12+
# COM: load <[[VSCALE:(vscale x )?]][[VEC_FACTOR:[0-9]+]] x float>
13+
# COM: fmul <[[VSCALE]][[VEC_FACTOR]] x float>
14+
# CHECK: fmul <[[VSCALE:(vscale x )?]][[VEC_FACTOR:[0-9]+]] x float>
1415
# CHECK: store <[[VSCALE]][[VEC_FACTOR]] x float>
1516

1617
# COM: Float64
1718
# CHECK: @japi1_prod_v_vT
18-
# CHECK: load <[[VSCALE:(vscale x )?]][[VEC_FACTOR:[0-9]+]] x double>
19-
# CHECK: fmul <[[VSCALE]][[VEC_FACTOR]] x double>
19+
# COM: load <[[VSCALE:(vscale x )?]][[VEC_FACTOR:[0-9]+]] x double>
20+
# COM: fmul <[[VSCALE]][[VEC_FACTOR]] x double>
21+
# CHECK: fmul <[[VSCALE:(vscale x )?]][[VEC_FACTOR:[0-9]+]] x double>
2022
# CHECK: store <[[VSCALE]][[VEC_FACTOR]] x double>
2123

2224
# COM: Int32
2325
# CHECK: @japi1_prod_v_vT
24-
# CHECK: load <[[VSCALE:(vscale x )?]][[VEC_FACTOR:[0-9]+]] x i32>
25-
# CHECK: mul <[[VSCALE]][[VEC_FACTOR]] x i32>
26+
# COM: load <[[VSCALE:(vscale x )?]][[VEC_FACTOR:[0-9]+]] x i32>
27+
# COM: mul <[[VSCALE]][[VEC_FACTOR]] x i32>
28+
# CHECK: mul <[[VSCALE:(vscale x )?]][[VEC_FACTOR:[0-9]+]] x i32>
2629
# CHECK: store <[[VSCALE]][[VEC_FACTOR]] x i32>
2730

2831
# COM: Int64
2932
# CHECK: @japi1_prod_v_vT
30-
# CHECK: load <[[VSCALE:(vscale x )?]][[VEC_FACTOR:[0-9]+]] x i64>
31-
# CHECK: mul <[[VSCALE]][[VEC_FACTOR]] x i64>
33+
# COM: load <[[VSCALE:(vscale x )?]][[VEC_FACTOR:[0-9]+]] x i64>
34+
# COM: mul <[[VSCALE]][[VEC_FACTOR]] x i64>
35+
# CHECK: mul <[[VSCALE:(vscale x )?]][[VEC_FACTOR:[0-9]+]] x i64>
3236
# CHECK: store <[[VSCALE]][[VEC_FACTOR]] x i64>
3337

3438
function prod_v_vT(R, x, y)
@@ -39,26 +43,30 @@ end
3943

4044
# COM: Float32
4145
# CHECK: @japi1_prod_vT_v
42-
# CHECK: load <[[VSCALE:(vscale x )?]][[VEC_FACTOR:[0-9]+]] x float>
43-
# CHECK: fmul <[[VSCALE]][[VEC_FACTOR]] x float>
46+
# COM: load <[[VSCALE:(vscale x )?]][[VEC_FACTOR:[0-9]+]] x float>
47+
# COM: fmul <[[VSCALE]][[VEC_FACTOR]] x float>
48+
# CHECK: fmul <[[VSCALE:(vscale x )?]][[VEC_FACTOR:[0-9]+]] x float>
4449
# CHECK: store <[[VSCALE]][[VEC_FACTOR]] x float>
4550

4651
# COM: Float64
4752
# CHECK: @japi1_prod_vT_v
48-
# CHECK: load <[[VSCALE:(vscale x )?]][[VEC_FACTOR:[0-9]+]] x double>
49-
# CHECK: fmul <[[VSCALE]][[VEC_FACTOR]] x double>
53+
# COM: load <[[VSCALE:(vscale x )?]][[VEC_FACTOR:[0-9]+]] x double>
54+
# COM: fmul <[[VSCALE]][[VEC_FACTOR]] x double>
55+
# CHECK: fmul <[[VSCALE:(vscale x )?]][[VEC_FACTOR:[0-9]+]] x double>
5056
# CHECK: store <[[VSCALE]][[VEC_FACTOR]] x double>
5157

5258
# COM: Int32
5359
# CHECK: @japi1_prod_vT_v
54-
# CHECK: load <[[VSCALE:(vscale x )?]][[VEC_FACTOR:[0-9]+]] x i32>
55-
# CHECK: mul <[[VSCALE]][[VEC_FACTOR]] x i32>
60+
# COM: load <[[VSCALE:(vscale x )?]][[VEC_FACTOR:[0-9]+]] x i32>
61+
# COM: mul <[[VSCALE]][[VEC_FACTOR]] x i32>
62+
# CHECK: mul <[[VSCALE:(vscale x )?]][[VEC_FACTOR:[0-9]+]] x i32>
5663
# CHECK: store <[[VSCALE]][[VEC_FACTOR]] x i32>
5764

5865
# COM: Int64
5966
# CHECK: @japi1_prod_vT_v
60-
# CHECK: load <[[VSCALE:(vscale x )?]][[VEC_FACTOR:[0-9]+]] x i64>
61-
# CHECK: mul <[[VSCALE]][[VEC_FACTOR]] x i64>
67+
# COM: load <[[VSCALE:(vscale x )?]][[VEC_FACTOR:[0-9]+]] x i64>
68+
# COM: mul <[[VSCALE]][[VEC_FACTOR]] x i64>
69+
# CHECK: mul <[[VSCALE:(vscale x )?]][[VEC_FACTOR:[0-9]+]] x i64>
6270
# CHECK: store <[[VSCALE]][[VEC_FACTOR]] x i64>
6371

6472
function prod_vT_v(R, x, y)
@@ -69,26 +77,30 @@ end
6977

7078
# COM: Float32
7179
# CHECK: @japi1_prod_v_M_vT
72-
# CHECK: load <[[VSCALE:(vscale x )?]][[VEC_FACTOR:[0-9]+]] x float>
73-
# CHECK: fmul <[[VSCALE]][[VEC_FACTOR]] x float>
80+
# COM: load <[[VSCALE:(vscale x )?]][[VEC_FACTOR:[0-9]+]] x float>
81+
# COM: fmul <[[VSCALE]][[VEC_FACTOR]] x float>
82+
# CHECK: fmul <[[VSCALE:(vscale x )?]][[VEC_FACTOR:[0-9]+]] x float>
7483
# CHECK: store <[[VSCALE]][[VEC_FACTOR]] x float>
7584

7685
# COM: Float64
7786
# CHECK: @japi1_prod_v_M_vT
78-
# CHECK: load <[[VSCALE:(vscale x )?]][[VEC_FACTOR:[0-9]+]] x double>
79-
# CHECK: fmul <[[VSCALE]][[VEC_FACTOR]] x double>
87+
# COM: load <[[VSCALE:(vscale x )?]][[VEC_FACTOR:[0-9]+]] x double>
88+
# COM: fmul <[[VSCALE]][[VEC_FACTOR]] x double>
89+
# CHECK: fmul <[[VSCALE:(vscale x )?]][[VEC_FACTOR:[0-9]+]] x double>
8090
# CHECK: store <[[VSCALE]][[VEC_FACTOR]] x double>
8191

8292
# COM: Int32
8393
# CHECK: @japi1_prod_v_M_vT
84-
# CHECK: load <[[VSCALE:(vscale x )?]][[VEC_FACTOR:[0-9]+]] x i32>
85-
# CHECK: mul <[[VSCALE]][[VEC_FACTOR]] x i32>
94+
# COM: load <[[VSCALE:(vscale x )?]][[VEC_FACTOR:[0-9]+]] x i32>
95+
# COM: mul <[[VSCALE]][[VEC_FACTOR]] x i32>
96+
# CHECK: mul <[[VSCALE:(vscale x )?]][[VEC_FACTOR:[0-9]+]] x i32>
8697
# CHECK: store <[[VSCALE]][[VEC_FACTOR]] x i32>
8798

8899
# COM: Int64
89100
# CHECK: @japi1_prod_v_M_vT
90-
# CHECK: load <[[VSCALE:(vscale x )?]][[VEC_FACTOR:[0-9]+]] x i64>
91-
# CHECK: mul <[[VSCALE]][[VEC_FACTOR]] x i64>
101+
# COM: load <[[VSCALE:(vscale x )?]][[VEC_FACTOR:[0-9]+]] x i64>
102+
# COM: mul <[[VSCALE]][[VEC_FACTOR]] x i64>
103+
# CHECK: mul <[[VSCALE:(vscale x )?]][[VEC_FACTOR:[0-9]+]] x i64>
92104
# CHECK: store <[[VSCALE]][[VEC_FACTOR]] x i64>
93105

94106
function prod_v_M_vT(R, x, M, y)

test/llvmpasses/pipeline-o2.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,21 +78,21 @@ end
7878
# COM: memset checks
7979

8080
# COM: INT64
81-
# ALL-LABEL: define nonnull {} addrspace(10)* @julia_zeros
81+
# ALL: define {{.*}} @julia_zeros
8282
# ALL-NOT: bounds_error
8383
# COM: memset is not used with bounds checks on (too late in the pipeline)
8484
# BC_OFF: llvm.memset
8585
# BC_AUTO: llvm.memset
8686

8787
# COM: INT32
88-
# ALL-LABEL: define nonnull {} addrspace(10)* @julia_zeros
88+
# ALL: define {{.*}} @julia_zeros
8989
# ALL-NOT: bounds_error
9090
# COM: memset is not used with bounds checks on (too late in the pipeline)
9191
# BC_OFF: llvm.memset
9292
# BC_AUTO: llvm.memset
9393

9494
# COM: INT16
95-
# ALL-LABEL: define nonnull {} addrspace(10)* @julia_zeros
95+
# ALL: define {{.*}} @julia_zeros
9696
# ALL-NOT: bounds_error
9797
# COM: memset is not used with bounds checks on (too late in the pipeline)
9898
# BC_OFF: llvm.memset

0 commit comments

Comments
 (0)