AVX512BW: Enable packed word shift for 512bit vector. Enable lowering scalar immidiat...
[oota-llvm.git] / test / CodeGen / X86 / negate-add-zero.ll
index 59a2bd09c18fd703a72cd28ff1848ed900a12b83..06341dc7ba53985223c2122a967716dc4f462dcf 100644 (file)
@@ -1,4 +1,4 @@
-; RUN: llvm-as < %s | llc -enable-unsafe-fp-math -march=x86 | not grep xor
+; RUN: llc < %s -enable-unsafe-fp-math -march=x86 | not grep xor
 ; PR3374
 
 target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128"
@@ -486,12 +486,6 @@ declare void @_ZN7CDSListIP9HingeNodeEC1Eii(%"struct.CDSList<HingeNode*>"*, i32,
 
 declare i8* @_Znwm(i32)
 
-declare i8* @llvm.eh.exception() nounwind
-
-declare i32 @llvm.eh.selector.i32(i8*, i8*, ...) nounwind
-
-declare i32 @llvm.eh.typeid.for.i32(i8*) nounwind
-
 declare void @_ZdlPv(i8*) nounwind
 
 declare i32 @__gxx_personality_v0(...)
@@ -831,76 +825,73 @@ declare void @_ZN11MatrixTools9transposeI11FixedMatrixIdLi6ELi6ELi0ELi0EEEENT_13
 declare void @_ZN21HNodeTranslateRotate311toCartesianEv(%struct.HNodeTranslateRotate3*)
 
 define linkonce void @_ZN21HNodeTranslateRotate36setVelERK9CDSVectorIdLi1EN3CDS12DefaultAllocEE(%struct.HNodeTranslateRotate3* %this, %"struct.CDSVector<double,0,CDS::DefaultAlloc>"* %velv) {
-entry:
-       %0 = add i32 0, -1              ; <i32> [#uses=1]
-       %1 = getelementptr double* null, i32 %0         ; <double*> [#uses=1]
-       %2 = load double* %1, align 8           ; <double> [#uses=1]
-       %3 = load double* null, align 8         ; <double> [#uses=2]
-       %4 = load double* null, align 8         ; <double> [#uses=2]
-       %5 = load double* null, align 8         ; <double> [#uses=3]
-       %6 = getelementptr %struct.HNodeTranslateRotate3* %this, i32 0, i32 2, i32 0, i32 0, i32 0, i32 0               ; <double*> [#uses=0]
-       %7 = getelementptr %struct.HNodeTranslateRotate3* %this, i32 0, i32 2, i32 0, i32 0, i32 0, i32 1               ; <double*> [#uses=0]
-       %8 = getelementptr %struct.HNodeTranslateRotate3* %this, i32 0, i32 2, i32 0, i32 0, i32 0, i32 2               ; <double*> [#uses=0]
-       %9 = getelementptr %struct.HNodeTranslateRotate3* %this, i32 0, i32 2, i32 0, i32 0, i32 0, i32 3               ; <double*> [#uses=0]
-       %10 = load double* null, align 8                ; <double> [#uses=2]
-       %11 = sub double -0.000000e+00, %10             ; <double> [#uses=1]
-       %12 = load double* null, align 8                ; <double> [#uses=2]
-       %13 = getelementptr %struct.HNodeTranslateRotate3* %this, i32 0, i32 1, i32 0, i32 0, i32 0, i32 3              ; <double*> [#uses=1]
-       %14 = load double* %13, align 8         ; <double> [#uses=2]
-       %15 = sub double -0.000000e+00, %14             ; <double> [#uses=1]
-       %16 = getelementptr %struct.HNodeTranslateRotate3* %this, i32 0, i32 1, i32 0, i32 0, i32 0, i32 2              ; <double*> [#uses=1]
-       %17 = load double* %16, align 8         ; <double> [#uses=2]
-       %18 = sub double -0.000000e+00, %17             ; <double> [#uses=1]
-       %19 = getelementptr %"struct.FixedMatrix<double,2,6,0,0>"* null, i32 0, i32 0, i32 0, i32 0             ; <double*> [#uses=0]
-       %20 = getelementptr %"struct.FixedMatrix<double,2,6,0,0>"* null, i32 0, i32 0, i32 0, i32 3             ; <double*> [#uses=0]
-       %21 = getelementptr %"struct.FixedMatrix<double,2,6,0,0>"* null, i32 0, i32 0, i32 0, i32 6             ; <double*> [#uses=0]
-       %22 = getelementptr %"struct.FixedMatrix<double,2,6,0,0>"* null, i32 0, i32 0, i32 0, i32 9             ; <double*> [#uses=0]
-       %23 = getelementptr %"struct.FixedMatrix<double,2,6,0,0>"* null, i32 0, i32 0, i32 0, i32 1             ; <double*> [#uses=0]
-       %24 = getelementptr %"struct.FixedMatrix<double,2,6,0,0>"* null, i32 0, i32 0, i32 0, i32 4             ; <double*> [#uses=0]
-       %25 = getelementptr %"struct.FixedMatrix<double,2,6,0,0>"* null, i32 0, i32 0, i32 0, i32 7             ; <double*> [#uses=0]
-       %26 = getelementptr %"struct.FixedMatrix<double,2,6,0,0>"* null, i32 0, i32 0, i32 0, i32 10            ; <double*> [#uses=0]
-       %27 = getelementptr %"struct.FixedMatrix<double,2,6,0,0>"* null, i32 0, i32 0, i32 0, i32 2             ; <double*> [#uses=0]
-       %28 = getelementptr %"struct.FixedMatrix<double,2,6,0,0>"* null, i32 0, i32 0, i32 0, i32 5             ; <double*> [#uses=0]
-       %29 = getelementptr %"struct.FixedMatrix<double,2,6,0,0>"* null, i32 0, i32 0, i32 0, i32 8             ; <double*> [#uses=0]
-       %30 = getelementptr %"struct.FixedMatrix<double,2,6,0,0>"* null, i32 0, i32 0, i32 0, i32 11            ; <double*> [#uses=0]
-       %31 = getelementptr %"struct.FixedMatrix<double,1,3,0,0>"* null, i32 0, i32 0, i32 0, i32 0             ; <double*> [#uses=0]
-       %32 = getelementptr %"struct.FixedMatrix<double,1,3,0,0>"* null, i32 0, i32 0, i32 0, i32 1             ; <double*> [#uses=1]
-       %33 = getelementptr %"struct.FixedMatrix<double,1,3,0,0>"* null, i32 0, i32 0, i32 0, i32 2             ; <double*> [#uses=1]
-       %34 = mul double %17, %5                ; <double> [#uses=1]
-       %35 = add double 0.000000e+00, %34              ; <double> [#uses=1]
-       %36 = add double 0.000000e+00, 0.000000e+00             ; <double> [#uses=1]
-       %37 = mul double %14, %3                ; <double> [#uses=1]
-       %38 = add double %36, %37               ; <double> [#uses=1]
-       %39 = mul double %12, %4                ; <double> [#uses=1]
-       %40 = add double %38, %39               ; <double> [#uses=1]
-       %41 = mul double %5, %11                ; <double> [#uses=1]
-       %42 = add double %40, %41               ; <double> [#uses=2]
+       %1 = getelementptr double, double* null, i32 -1         ; <double*> [#uses=1]
+       %2 = load double, double* %1, align 8           ; <double> [#uses=1]
+       %3 = load double, double* null, align 8         ; <double> [#uses=2]
+       %4 = load double, double* null, align 8         ; <double> [#uses=2]
+       %5 = load double, double* null, align 8         ; <double> [#uses=3]
+       %6 = getelementptr %struct.HNodeTranslateRotate3, %struct.HNodeTranslateRotate3* %this, i32 0, i32 2, i32 0, i32 0, i32 0, i32 0                ; <double*> [#uses=0]
+       %7 = getelementptr %struct.HNodeTranslateRotate3, %struct.HNodeTranslateRotate3* %this, i32 0, i32 2, i32 0, i32 0, i32 0, i32 1                ; <double*> [#uses=0]
+       %8 = getelementptr %struct.HNodeTranslateRotate3, %struct.HNodeTranslateRotate3* %this, i32 0, i32 2, i32 0, i32 0, i32 0, i32 2                ; <double*> [#uses=0]
+       %9 = getelementptr %struct.HNodeTranslateRotate3, %struct.HNodeTranslateRotate3* %this, i32 0, i32 2, i32 0, i32 0, i32 0, i32 3                ; <double*> [#uses=0]
+       %10 = load double, double* null, align 8                ; <double> [#uses=2]
+       %11 = fsub double -0.000000e+00, %10            ; <double> [#uses=1]
+       %12 = load double, double* null, align 8                ; <double> [#uses=2]
+       %13 = getelementptr %struct.HNodeTranslateRotate3, %struct.HNodeTranslateRotate3* %this, i32 0, i32 1, i32 0, i32 0, i32 0, i32 3               ; <double*> [#uses=1]
+       %14 = load double, double* %13, align 8         ; <double> [#uses=2]
+       %15 = fsub double -0.000000e+00, %14            ; <double> [#uses=1]
+       %16 = getelementptr %struct.HNodeTranslateRotate3, %struct.HNodeTranslateRotate3* %this, i32 0, i32 1, i32 0, i32 0, i32 0, i32 2               ; <double*> [#uses=1]
+       %17 = load double, double* %16, align 8         ; <double> [#uses=2]
+       %18 = fsub double -0.000000e+00, %17            ; <double> [#uses=1]
+       %19 = getelementptr %"struct.FixedMatrix<double,2,6,0,0>", %"struct.FixedMatrix<double,2,6,0,0>"* null, i32 0, i32 0, i32 0, i32 0              ; <double*> [#uses=0]
+       %20 = getelementptr %"struct.FixedMatrix<double,2,6,0,0>", %"struct.FixedMatrix<double,2,6,0,0>"* null, i32 0, i32 0, i32 0, i32 3              ; <double*> [#uses=0]
+       %21 = getelementptr %"struct.FixedMatrix<double,2,6,0,0>", %"struct.FixedMatrix<double,2,6,0,0>"* null, i32 0, i32 0, i32 0, i32 6              ; <double*> [#uses=0]
+       %22 = getelementptr %"struct.FixedMatrix<double,2,6,0,0>", %"struct.FixedMatrix<double,2,6,0,0>"* null, i32 0, i32 0, i32 0, i32 9              ; <double*> [#uses=0]
+       %23 = getelementptr %"struct.FixedMatrix<double,2,6,0,0>", %"struct.FixedMatrix<double,2,6,0,0>"* null, i32 0, i32 0, i32 0, i32 1              ; <double*> [#uses=0]
+       %24 = getelementptr %"struct.FixedMatrix<double,2,6,0,0>", %"struct.FixedMatrix<double,2,6,0,0>"* null, i32 0, i32 0, i32 0, i32 4              ; <double*> [#uses=0]
+       %25 = getelementptr %"struct.FixedMatrix<double,2,6,0,0>", %"struct.FixedMatrix<double,2,6,0,0>"* null, i32 0, i32 0, i32 0, i32 7              ; <double*> [#uses=0]
+       %26 = getelementptr %"struct.FixedMatrix<double,2,6,0,0>", %"struct.FixedMatrix<double,2,6,0,0>"* null, i32 0, i32 0, i32 0, i32 10             ; <double*> [#uses=0]
+       %27 = getelementptr %"struct.FixedMatrix<double,2,6,0,0>", %"struct.FixedMatrix<double,2,6,0,0>"* null, i32 0, i32 0, i32 0, i32 2              ; <double*> [#uses=0]
+       %28 = getelementptr %"struct.FixedMatrix<double,2,6,0,0>", %"struct.FixedMatrix<double,2,6,0,0>"* null, i32 0, i32 0, i32 0, i32 5              ; <double*> [#uses=0]
+       %29 = getelementptr %"struct.FixedMatrix<double,2,6,0,0>", %"struct.FixedMatrix<double,2,6,0,0>"* null, i32 0, i32 0, i32 0, i32 8              ; <double*> [#uses=0]
+       %30 = getelementptr %"struct.FixedMatrix<double,2,6,0,0>", %"struct.FixedMatrix<double,2,6,0,0>"* null, i32 0, i32 0, i32 0, i32 11             ; <double*> [#uses=0]
+       %31 = getelementptr %"struct.FixedMatrix<double,1,3,0,0>", %"struct.FixedMatrix<double,1,3,0,0>"* null, i32 0, i32 0, i32 0, i32 0              ; <double*> [#uses=0]
+       %32 = getelementptr %"struct.FixedMatrix<double,1,3,0,0>", %"struct.FixedMatrix<double,1,3,0,0>"* null, i32 0, i32 0, i32 0, i32 1              ; <double*> [#uses=1]
+       %33 = getelementptr %"struct.FixedMatrix<double,1,3,0,0>", %"struct.FixedMatrix<double,1,3,0,0>"* null, i32 0, i32 0, i32 0, i32 2              ; <double*> [#uses=1]
+       %34 = fmul double %17, %5               ; <double> [#uses=1]
+       %35 = fadd double 0.000000e+00, %34             ; <double> [#uses=1]
+       %36 = fadd double 0.000000e+00, 0.000000e+00            ; <double> [#uses=1]
+       %37 = fmul double %14, %3               ; <double> [#uses=1]
+       %38 = fadd double %36, %37              ; <double> [#uses=1]
+       %39 = fmul double %12, %4               ; <double> [#uses=1]
+       %40 = fadd double %38, %39              ; <double> [#uses=1]
+       %41 = fmul double %5, %11               ; <double> [#uses=1]
+       %42 = fadd double %40, %41              ; <double> [#uses=2]
        store double %42, double* %32, align 8
-       %43 = mul double %2, %15                ; <double> [#uses=1]
-       %44 = add double %43, 0.000000e+00              ; <double> [#uses=1]
-       %45 = mul double %3, %18                ; <double> [#uses=1]
-       %46 = add double %44, %45               ; <double> [#uses=1]
-       %47 = mul double %10, %4                ; <double> [#uses=1]
-       %48 = add double %46, %47               ; <double> [#uses=1]
-       %49 = mul double %12, %5                ; <double> [#uses=1]
-       %50 = add double %48, %49               ; <double> [#uses=2]
+       %43 = fmul double %2, %15               ; <double> [#uses=1]
+       %44 = fadd double %43, 0.000000e+00             ; <double> [#uses=1]
+       %45 = fmul double %3, %18               ; <double> [#uses=1]
+       %46 = fadd double %44, %45              ; <double> [#uses=1]
+       %47 = fmul double %10, %4               ; <double> [#uses=1]
+       %48 = fadd double %46, %47              ; <double> [#uses=1]
+       %49 = fmul double %12, %5               ; <double> [#uses=1]
+       %50 = fadd double %48, %49              ; <double> [#uses=2]
        store double %50, double* %33, align 8
-       %51 = mul double %35, 2.000000e+00              ; <double> [#uses=1]
-       %52 = mul double %42, 2.000000e+00              ; <double> [#uses=1]
-       %53 = mul double %50, 2.000000e+00              ; <double> [#uses=1]
-       %54 = getelementptr %struct.HNodeTranslateRotate3* %this, i32 0, i32 0, i32 10, i32 0, i32 0, i32 0             ; <double*> [#uses=1]
+       %51 = fmul double %35, 2.000000e+00             ; <double> [#uses=1]
+       %52 = fmul double %42, 2.000000e+00             ; <double> [#uses=1]
+       %53 = fmul double %50, 2.000000e+00             ; <double> [#uses=1]
+       %54 = getelementptr %struct.HNodeTranslateRotate3, %struct.HNodeTranslateRotate3* %this, i32 0, i32 0, i32 10, i32 0, i32 0, i32 0              ; <double*> [#uses=1]
        store double %51, double* %54, align 8
-       %55 = getelementptr %struct.HNodeTranslateRotate3* %this, i32 0, i32 0, i32 10, i32 0, i32 0, i32 1             ; <double*> [#uses=1]
+       %55 = getelementptr %struct.HNodeTranslateRotate3, %struct.HNodeTranslateRotate3* %this, i32 0, i32 0, i32 10, i32 0, i32 0, i32 1              ; <double*> [#uses=1]
        store double %52, double* %55, align 8
-       %56 = getelementptr %struct.HNodeTranslateRotate3* %this, i32 0, i32 0, i32 10, i32 0, i32 0, i32 2             ; <double*> [#uses=1]
+       %56 = getelementptr %struct.HNodeTranslateRotate3, %struct.HNodeTranslateRotate3* %this, i32 0, i32 0, i32 10, i32 0, i32 0, i32 2              ; <double*> [#uses=1]
        store double %53, double* %56, align 8
-       %57 = add i32 0, 4              ; <i32> [#uses=1]
-       %58 = getelementptr %"struct.SubVector<CDSVector<double, 1, CDS::DefaultAlloc> >"* null, i32 0, i32 0           ; <%"struct.CDSVector<double,0,CDS::DefaultAlloc>"**> [#uses=1]
-       store %"struct.CDSVector<double,0,CDS::DefaultAlloc>"* %velv, %"struct.CDSVector<double,0,CDS::DefaultAlloc>"** %58, align 8
-       %59 = getelementptr %"struct.SubVector<CDSVector<double, 1, CDS::DefaultAlloc> >"* null, i32 0, i32 1           ; <i32*> [#uses=1]
-       store i32 %57, i32* %59, align 4
-       %60 = getelementptr %"struct.SubVector<CDSVector<double, 1, CDS::DefaultAlloc> >"* null, i32 0, i32 2           ; <i32*> [#uses=1]
-       store i32 3, i32* %60, align 8
+       %57 = getelementptr %"struct.SubVector<CDSVector<double, 1, CDS::DefaultAlloc> >", %"struct.SubVector<CDSVector<double, 1, CDS::DefaultAlloc> >"* null, i32 0, i32 0            ; <%"struct.CDSVector<double,0,CDS::DefaultAlloc>"**> [#uses=1]
+       store %"struct.CDSVector<double,0,CDS::DefaultAlloc>"* %velv, %"struct.CDSVector<double,0,CDS::DefaultAlloc>"** %57, align 8
+       %58 = getelementptr %"struct.SubVector<CDSVector<double, 1, CDS::DefaultAlloc> >", %"struct.SubVector<CDSVector<double, 1, CDS::DefaultAlloc> >"* null, i32 0, i32 1            ; <i32*> [#uses=1]
+       store i32 4, i32* %58, align 4
+       %59 = getelementptr %"struct.SubVector<CDSVector<double, 1, CDS::DefaultAlloc> >", %"struct.SubVector<CDSVector<double, 1, CDS::DefaultAlloc> >"* null, i32 0, i32 2            ; <i32*> [#uses=1]
+       store i32 3, i32* %59, align 8
        unreachable
 }