; CHECK: Report: unsafe dependent memory operations in loop
; CHECK-NOT: Memory dependences are safe
-@n = global i32 20, align 4
@B = common global i32* null, align 8
@A = common global i32* null, align 8
define void @f() {
entry:
- %a = load i32** @A, align 8
- %b = load i32** @B, align 8
+ %a = load i32*, i32** @A, align 8
+ %b = load i32*, i32** @B, align 8
br label %for.body
for.body: ; preds = %for.body, %entry
%storemerge3 = phi i64 [ 0, %entry ], [ %add, %for.body ]
- %arrayidxA = getelementptr inbounds i32* %a, i64 %storemerge3
- %loadA = load i32* %arrayidxA, align 2
+ %arrayidxA = getelementptr inbounds i32, i32* %a, i64 %storemerge3
+ %loadA = load i32, i32* %arrayidxA, align 2
- %arrayidxB = getelementptr inbounds i32* %b, i64 %storemerge3
- %loadB = load i32* %arrayidxB, align 2
+ %arrayidxB = getelementptr inbounds i32, i32* %b, i64 %storemerge3
+ %loadB = load i32, i32* %arrayidxB, align 2
%mul = mul i32 %loadB, %loadA
%add = add nuw nsw i64 %storemerge3, 1
%a_float = bitcast i32* %a to float*
- %arrayidxA_plus_2 = getelementptr inbounds float* %a_float, i64 %add
+ %arrayidxA_plus_2 = getelementptr inbounds float, float* %a_float, i64 %add
%mul_float = sitofp i32 %mul to float
store float %mul_float, float* %arrayidxA_plus_2, align 2