1 ; RUN: opt < %s -basicaa -bb-vectorize -disable-output 2 ; This is a bugpoint-reduced test case. It did not always assert, but does reproduce the bug 3 ; and running under valgrind (or some similar tool) will catch the error. 4 5 target datalayout = "e-p:64:64:64-S128-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f16:16:16-f32:32:32-f64:64:64-f128:128:128-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64" 6 target triple = "x86_64-apple-darwin12.2.0" 7 8 %0 = type { [10 x { float, float }], [10 x { float, float }], [10 x { float, float }], [10 x { float, float }], [10 x { float, float }] } 9 %1 = type { [10 x [8 x i8]] } 10 %2 = type { i64, i64 } 11 %3 = type { [10 x i64], i64, i64, i64, i64, i64 } 12 %4 = type { i64, i64, i64, i64, i64, i64 } 13 %5 = type { [10 x i64] } 14 %6 = type { [10 x float], [10 x float], [10 x float], [10 x float] } 15 %struct.__st_parameter_dt.1.3.5.7 = type { %struct.__st_parameter_common.0.2.4.6, i64, i64*, i64*, i8*, i8*, i32, i32, i8*, i8*, i32, i32, i8*, [256 x i8], i32*, i64, i8*, i32, i32, i8*, i8*, i32, i32, i8*, i8*, i32, i32, i8*, i8*, i32, [4 x i8] } 16 %struct.__st_parameter_common.0.2.4.6 = type { i32, i32, i8*, i32, i32, i8*, i32* } 17 18 @cctenso_ = external unnamed_addr global %0, align 32 19 @ctenso_ = external unnamed_addr global %1, align 32 20 @i_dim_ = external unnamed_addr global %2, align 16 21 @itenso1_ = external unnamed_addr global %3, align 32 22 @itenso2_ = external unnamed_addr global %4, align 32 23 @ltenso_ = external unnamed_addr global %5, align 32 24 @rtenso_ = external unnamed_addr global %6, align 32 25 @.cst = external unnamed_addr constant [8 x i8], align 8 26 @.cst1 = external unnamed_addr constant [3 x i8], align 8 27 @.cst2 = external unnamed_addr constant [29 x i8], align 8 28 @.cst3 = external unnamed_addr constant [32 x i8], align 64 29 30 define void @cart_to_dc2y_(double* noalias nocapture %xx, double* noalias nocapture %yy, double* noalias nocapture %zz, [5 x { double, double }]* noalias nocapture %c2ten) nounwind uwtable { 31 entry: 32 %0 = fmul double undef, undef 33 %1 = fmul double undef, undef 34 %2 = fadd double undef, undef 35 %3 = fmul double undef, 0x3FE8B8B76E3E9919 36 %4 = fsub double %0, %1 37 %5 = fsub double -0.000000e+00, undef 38 %6 = fmul double undef, undef 39 %7 = fmul double %4, %6 40 %8 = fmul double undef, 2.000000e+00 41 %9 = fmul double %8, undef 42 %10 = fmul double undef, %9 43 %11 = fmul double %10, undef 44 %12 = fsub double undef, %7 45 %13 = fmul double %3, %12 46 %14 = fmul double %3, undef 47 %15 = getelementptr inbounds [5 x { double, double }], [5 x { double, double }]* %c2ten, i64 0, i64 0, i32 0 48 store double %13, double* %15, align 8 49 %16 = getelementptr inbounds [5 x { double, double }], [5 x { double, double }]* %c2ten, i64 0, i64 0, i32 1 50 %17 = fmul double undef, %8 51 %18 = fmul double %17, undef 52 %19 = fmul double undef, %18 53 %20 = fadd double undef, undef 54 %21 = fmul double %3, %19 55 %22 = fsub double -0.000000e+00, %21 56 %23 = getelementptr inbounds [5 x { double, double }], [5 x { double, double }]* %c2ten, i64 0, i64 1, i32 0 57 store double %22, double* %23, align 8 58 %24 = getelementptr inbounds [5 x { double, double }], [5 x { double, double }]* %c2ten, i64 0, i64 1, i32 1 59 %25 = fmul double undef, 0x3FE42F601A8C6794 60 %26 = fmul double undef, 2.000000e+00 61 %27 = fsub double %26, %0 62 %28 = fmul double %6, undef 63 %29 = fsub double undef, %28 64 %30 = getelementptr inbounds [5 x { double, double }], [5 x { double, double }]* %c2ten, i64 0, i64 2, i32 0 65 store double undef, double* %30, align 8 66 %31 = getelementptr inbounds [5 x { double, double }], [5 x { double, double }]* %c2ten, i64 0, i64 2, i32 1 67 %32 = fmul double undef, %17 68 %33 = fmul double undef, %17 69 %34 = fmul double undef, %32 70 %35 = fmul double undef, %33 71 %36 = fsub double undef, %35 72 %37 = fmul double %3, %34 73 %38 = getelementptr inbounds [5 x { double, double }], [5 x { double, double }]* %c2ten, i64 0, i64 3, i32 0 74 store double %37, double* %38, align 8 75 %39 = getelementptr inbounds [5 x { double, double }], [5 x { double, double }]* %c2ten, i64 0, i64 3, i32 1 76 %40 = fmul double undef, %8 77 %41 = fmul double undef, %40 78 %42 = fmul double undef, %41 79 %43 = fsub double undef, %42 80 %44 = fmul double %3, %43 81 %45 = getelementptr inbounds [5 x { double, double }], [5 x { double, double }]* %c2ten, i64 0, i64 4, i32 0 82 store double %13, double* %45, align 8 83 %46 = getelementptr inbounds [5 x { double, double }], [5 x { double, double }]* %c2ten, i64 0, i64 4, i32 1 84 %47 = fsub double -0.000000e+00, %14 85 store double %47, double* %16, align 8 86 store double undef, double* %24, align 8 87 store double -0.000000e+00, double* %31, align 8 88 store double undef, double* %39, align 8 89 store double undef, double* %46, align 8 90 ret void 91 } 92 93 attributes #0 = { nounwind uwtable } 94 attributes #1 = { nounwind readnone } 95 attributes #2 = { nounwind } 96