diff --git a/clang/test/Driver/Inputs/basic_ve_tree/opt/nec/ve/lib/crt1.o b/clang/test/Driver/Inputs/basic_ve_tree/opt/nec/ve/lib/crt1.o new file mode 100644 index 00000000000000..e69de29bb2d1d6 diff --git a/clang/test/Driver/Inputs/basic_ve_tree/opt/nec/ve/lib/crti.o b/clang/test/Driver/Inputs/basic_ve_tree/opt/nec/ve/lib/crti.o new file mode 100644 index 00000000000000..e69de29bb2d1d6 diff --git a/clang/test/Driver/Inputs/basic_ve_tree/opt/nec/ve/lib/crtn.o b/clang/test/Driver/Inputs/basic_ve_tree/opt/nec/ve/lib/crtn.o new file mode 100644 index 00000000000000..e69de29bb2d1d6 diff --git a/clang/test/Driver/Inputs/basic_ve_tree/resource_dir/lib/linux/clang_rt.crtbegin-ve.o b/clang/test/Driver/Inputs/basic_ve_tree/resource_dir/lib/linux/clang_rt.crtbegin-ve.o new file mode 100644 index 00000000000000..e69de29bb2d1d6 diff --git a/clang/test/Driver/Inputs/basic_ve_tree/resource_dir/lib/linux/clang_rt.crtend-ve.o b/clang/test/Driver/Inputs/basic_ve_tree/resource_dir/lib/linux/clang_rt.crtend-ve.o new file mode 100644 index 00000000000000..e69de29bb2d1d6 diff --git a/clang/test/Driver/Inputs/basic_ve_tree/resource_dir/lib/linux/libclang_rt.builtins-ve.a b/clang/test/Driver/Inputs/basic_ve_tree/resource_dir/lib/linux/libclang_rt.builtins-ve.a new file mode 100644 index 00000000000000..e69de29bb2d1d6 diff --git a/clang/test/Driver/ve-toolchain.c b/clang/test/Driver/ve-toolchain.c index 0ca3c84373f31c..ac925e470770e1 100644 --- a/clang/test/Driver/ve-toolchain.c +++ b/clang/test/Driver/ve-toolchain.c @@ -7,83 +7,93 @@ // RUN: %clang -### -g -target ve %s 2>&1 | FileCheck -check-prefix=DWARF_VER %s // DWARF_VER: "-dwarf-version=4" -///----------------------------------------------------------------------------- -/// Checking dynamic-linker - -// RUN: %clang -### -target ve %s 2>&1 | FileCheck -check-prefix=DYNLINKER %s -// DYNLINKER: nld{{.*}} "-dynamic-linker" "/opt/nec/ve/lib/ld-linux-ve.so.1" - -///----------------------------------------------------------------------------- -/// Checking VE specific option - -// RUN: %clang -### -target ve %s 2>&1 | FileCheck -check-prefix=VENLDOPT %s -// VENLDOPT: nld{{.*}} "-z" "max-page-size=0x4000000" - ///----------------------------------------------------------------------------- /// Checking include-path -// RUN: %clang -### -target ve %s 2>&1 | FileCheck -check-prefix=DEFINC %s +// RUN: %clang -### -target ve --sysroot %S/Inputs/basic_ve_tree %s \ +// RUN: -resource-dir=%S/Input/basic_ve_tree/resource_dir \ +// RUN: 2>&1 | FileCheck -check-prefix=DEFINC %s // DEFINC: clang{{.*}} "-cc1" -// DEFINC: "-nostdsysteminc" -// DEFINC: "-internal-isystem" "{{.*}}/lib/clang/{{[0-9.]*}}/include" -// DEFINC: "-internal-isystem" "/opt/nec/ve/include" - -// RUN: %clang -### -target ve %s -nostdlibinc 2>&1 | \ -// RUN: FileCheck -check-prefix=NOSTDLIBINC %s +// DEFINC-SAME: "-nostdsysteminc" +// DEFINC-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]" +// DEFINC-SAME: "-isysroot" "[[SYSROOT:[^"]+]]" +// DEFINC-SAME: "-internal-isystem" "[[RESOURCE_DIR]]/include" +// DEFINC-SAME: "-internal-isystem" "[[SYSROOT]]/opt/nec/ve/include" + +// RUN: %clang -### -target ve --sysroot %S/Inputs/basic_ve_tree %s \ +// RUN: -resource-dir=%S/Input/basic_ve_tree/resource_dir \ +// RUN: -nostdlibinc 2>&1 | FileCheck -check-prefix=NOSTDLIBINC %s // NOSTDLIBINC: clang{{.*}} "-cc1" -// NOSTDLIBINC: "-internal-isystem" "{{.*}}/lib/clang/{{[0-9.]*}}/include" -// NOSTDLIBINC-NOT: "-internal-isystem" "/opt/nec/ve/include" - -// RUN: %clang -### -target ve %s -nobuiltininc 2>&1 | \ -// RUN: FileCheck -check-prefix=NOBUILTININC %s +// NOSTDLIBINC-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]" +// NOSTDLIBINC-SAME: "-isysroot" "[[SYSROOT:[^"]+]]" +// NOSTDLIBINC-SAME: "-internal-isystem" "[[RESOURCE_DIR]]/include" +// NOSTDLIBINC-NOT: "-internal-isystem" "[[SYSROOT]]/opt/nec/ve/include" + +// RUN: %clang -### -target ve --sysroot %S/Inputs/basic_ve_tree %s \ +// RUN: -resource-dir=%S/Input/basic_ve_tree/resource_dir \ +// RUN: -nobuiltininc 2>&1 | FileCheck -check-prefix=NOBUILTININC %s // NOBUILTININC: clang{{.*}} "-cc1" -// NOBUILTININC: "-nobuiltininc" -// NOBUILTININC-NOT: "-internal-isystem" "{{.*}}/lib/clang/{{[0-9.]*}}/include" -// NOBUILTININC: "-internal-isystem" "/opt/nec/ve/include" - -// RUN: %clang -### -target ve %s -nostdinc 2>&1 | \ -// RUN: FileCheck -check-prefix=NOSTDINC %s +// NOBUILTININC-SAME: "-nobuiltininc" +// NOBUILTININC-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]" +// NOBUILTININC-SAME: "-isysroot" "[[SYSROOT:[^"]+]]" +// NOBUILTININC-NOT: "-internal-isystem" "[[RESOURCE_DIR]]/include" +// NOBUILTININC-SAME: "-internal-isystem" "[[SYSROOT]]/opt/nec/ve/include" + +// RUN: %clang -### -target ve --sysroot %S/Inputs/basic_ve_tree %s \ +// RUN: -resource-dir=%S/Input/basic_ve_tree/resource_dir \ +// RUN: -nostdinc 2>&1 | FileCheck -check-prefix=NOSTDINC %s // NOSTDINC: clang{{.*}} "-cc1" -// NOSTDINC: "-nobuiltininc" -// NOSTDINC-NOT: "-internal-isystem" "{{.*}}/lib/clang/{{[0-9.]*}}/include" -// NOSTDINC-NOT: "-internal-isystem" "/opt/nec/ve/include" - -///----------------------------------------------------------------------------- -/// Checking -fuse-init-array - -// RUN: %clang -### -target ve %s 2>&1 | FileCheck -check-prefix=DEFINITARRAY %s -// DEFINITARRAY: clang{{.*}} "-cc1" -// DEFINITARRAY-NOT: "-fuse-init-array" - -// RUN: %clang -### -target ve %s -fno-use-init-array 2>&1 | \ -// RUN: FileCheck -check-prefix=NOTINITARRAY %s -// NOTINITARRAY: clang{{.*}} "-cc1" -// NOTINITARRAY: "-fno-use-init-array" +// NOSTDINC-SAME: "-nobuiltininc" +// NOSTDINC-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]" +// NOSTDINC-SAME: "-isysroot" "[[SYSROOT:[^"]+]]" +// NOSTDINC-NOT: "-internal-isystem" "[[RESOURCE_DIR]]/include" +// NOSTDINC-NOT: "-internal-isystem" "[[SYSROOT]]/opt/nec/ve/include" ///----------------------------------------------------------------------------- /// Checking -faddrsig -// RUN: %clang -### -target ve %s 2>&1 | FileCheck -check-prefix=DEFADDESIG %s -// DEFADDESIG: clang{{.*}} "-cc1" -// DEFADDESIG-NOT: "-faddrsig" +// RUN: %clang -### -target ve %s 2>&1 | FileCheck -check-prefix=DEFADDRSIG %s +// DEFADDRSIG: clang{{.*}} "-cc1" +// DEFADDRSIG-NOT: "-faddrsig" ///----------------------------------------------------------------------------- -/// Checking exceptions - -// RUN: %clang -### -target ve %s 2>&1 | FileCheck -check-prefix=DEFEXCEPTION %s -// DEFEXCEPTION: clang{{.*}} "-cc1" -// DEFEXCEPTION: "-fsjlj-exceptions" - -///----------------------------------------------------------------------------- -/// Passing -fintegrated-as +/// Checking -fintegrated-as // RUN: %clang -### -target ve -x assembler %s 2>&1 | \ -// RUN: FileCheck -check-prefix=AS_LINK %s +// RUN: FileCheck -check-prefix=AS %s // RUN: %clang -### -target ve -fno-integrated-as -x assembler %s 2>&1 | \ -// RUN: FileCheck -check-prefix=NAS_LINK %s +// RUN: FileCheck -check-prefix=NAS %s -// AS_LINK: clang{{.*}} "-cc1as" -// AS_LINK: nld{{.*}} +// AS: clang{{.*}} "-cc1as" +// AS: nld{{.*}} -// NAS_LINK: nas{{.*}} -// NAS_LINK: nld{{.*}} +// NAS: nas{{.*}} +// NAS: nld{{.*}} + +///----------------------------------------------------------------------------- +/// Checking default behavior: +/// - dynamic linker +/// - library paths +/// - nld VE specific options +/// - sjlj exception + +// RUN: %clang -### -target ve-unknown-linux-gnu \ +// RUN: --sysroot %S/Inputs/basic_ve_tree \ +// RUN: -resource-dir=%S/Inputs/basic_ve_tree/resource_dir \ +// RUN: %s 2>&1 | FileCheck -check-prefix=DEF %s + +// DEF: clang{{.*}}" "-cc1" +// DEF-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]" +// DEF-SAME: "-isysroot" "[[SYSROOT:[^"]+]]" +// DEF-SAME: "-fsjlj-exceptions" +// DEF: nld" +// DEF-SAME: "--sysroot=[[SYSROOT]]" +// DEF-SAME: "-dynamic-linker" "/opt/nec/ve/lib/ld-linux-ve.so.1" +// DEF-SAME: "[[SYSROOT]]/opt/nec/ve/lib/crt1.o" +// DEF-SAME: "[[SYSROOT]]/opt/nec/ve/lib/crti.o" +// DEF-SAME: "-z" "max-page-size=0x4000000" +// DEF-SAME: "[[RESOURCE_DIR]]/lib/linux/clang_rt.crtbegin-ve.o" +// DEF-SAME: "[[RESOURCE_DIR]]/lib/linux/libclang_rt.builtins-ve.a" "-lc" +// DEF-SAME: "[[RESOURCE_DIR]]/lib/linux/libclang_rt.builtins-ve.a" +// DEF-SAME: "[[RESOURCE_DIR]]/lib/linux/clang_rt.crtend-ve.o" +// DEF-SAME: "[[SYSROOT]]/opt/nec/ve/lib/crtn.o" diff --git a/clang/test/Driver/ve-toolchain.cpp b/clang/test/Driver/ve-toolchain.cpp index 36a23aa87f9833..ffa9a044d9276e 100644 --- a/clang/test/Driver/ve-toolchain.cpp +++ b/clang/test/Driver/ve-toolchain.cpp @@ -7,111 +7,125 @@ // RUN: %clangxx -### -g -target ve %s 2>&1 | FileCheck -check-prefix=DWARF_VER %s // DWARF_VER: "-dwarf-version=4" -///----------------------------------------------------------------------------- -/// Checking VE specific option - -// RUN: %clangxx -### -target ve %s 2>&1 | FileCheck -check-prefix=VENLDOPT %s -// VENLDOPT: nld{{.*}} "-z" "max-page-size=0x4000000" - ///----------------------------------------------------------------------------- /// Checking include-path -// RUN: %clangxx -### -target ve %s 2>&1 | FileCheck -check-prefix=DEFINC %s +// RUN: %clangxx -### -target ve --sysroot %S/Inputs/basic_ve_tree %s \ +// RUN: -resource-dir=%S/Input/basic_ve_tree/resource_dir \ +// RUN: 2>&1 | FileCheck -check-prefix=DEFINC %s // DEFINC: clang{{.*}} "-cc1" -// DEFINC: "-nostdsysteminc" -// DEFINC: "-internal-isystem" "{{.*}}/lib/clang/{{[0-9.]*}}/include/c++/v1" -// DEFINC: "-internal-isystem" "{{.*}}/lib/clang/{{[0-9.]*}}/include" -// DEFINC: "-internal-isystem" "/opt/nec/ve/include" - -// RUN: %clangxx -### -target ve %s -nostdlibinc 2>&1 | \ -// RUN: FileCheck -check-prefix=NOSTDLIBINC %s +// DEFINC-SAME: "-nostdsysteminc" +// DEFINC-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]" +// DEFINC-SAME: "-isysroot" "[[SYSROOT:[^"]+]]" +// DEFINC-SAME: "-internal-isystem" "[[RESOURCE_DIR]]/include/c++/v1" +// DEFINC-SAME: "-internal-isystem" "[[RESOURCE_DIR]]/include" +// DEFINC-SAME: "-internal-isystem" "[[SYSROOT]]/opt/nec/ve/include" + +// RUN: %clangxx -### -target ve --sysroot %S/Inputs/basic_ve_tree %s \ +// RUN: -resource-dir=%S/Input/basic_ve_tree/resource_dir \ +// RUN: -nostdlibinc 2>&1 | FileCheck -check-prefix=NOSTDLIBINC %s // NOSTDLIBINC: clang{{.*}} "-cc1" -// NOSTDLIBINC-NOT: "-internal-isystem" "{{.*}}/lib/clang/{{[0-9.]*}}/include/c++/v1" -// NOSTDLIBINC: "-internal-isystem" "{{.*}}/lib/clang/{{[0-9.]*}}/include" -// NOSTDLIBINC-NOT: "-internal-isystem" "/opt/nec/ve/include" - -// RUN: %clangxx -### -target ve %s -nobuiltininc 2>&1 | \ -// RUN: FileCheck -check-prefix=NOBUILTININC %s +// NOSTDLIBINC-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]" +// NOSTDLIBINC-SAME: "-isysroot" "[[SYSROOT:[^"]+]]" +// NOSTDLIBINC-NOT: "-internal-isystem" "[[RESOURCE_DIR]]/include/c++/v1" +// NOSTDLIBINC-SAME: "-internal-isystem" "[[RESOURCE_DIR]]/include" +// NOSTDLIBINC-NOT: "-internal-isystem" "[[SYSROOT]]/opt/nec/ve/include" + +// RUN: %clangxx -### -target ve --sysroot %S/Inputs/basic_ve_tree %s \ +// RUN: -resource-dir=%S/Input/basic_ve_tree/resource_dir \ +// RUN: -nobuiltininc 2>&1 | FileCheck -check-prefix=NOBUILTININC %s // NOBUILTININC: clang{{.*}} "-cc1" -// NOBUILTININC: "-nobuiltininc" -// NOBUILTININC: "-internal-isystem" "{{.*}}/lib/clang/{{[0-9.]*}}/include/c++/v1" -// NOBUILTININC-NOT: "-internal-isystem" "{{.*}}/lib/clang/{{[0-9.]*}}/include" -// NOBUILTININC: "-internal-isystem" "/opt/nec/ve/include" - -// RUN: %clangxx -### -target ve %s -nostdinc 2>&1 | \ -// RUN: FileCheck -check-prefix=NOSTDINC %s +// NOBUILTININC-SAME: "-nobuiltininc" +// NOBUILTININC-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]" +// NOBUILTININC-SAME: "-isysroot" "[[SYSROOT:[^"]+]]" +// NOBUILTININC-SAME: "-internal-isystem" "[[RESOURCE_DIR]]/include/c++/v1" +// NOBUILTININC-NOT: "-internal-isystem" "[[RESOURCE_DIR]]/include" +// NOBUILTININC-SAME: "-internal-isystem" "[[SYSROOT]]/opt/nec/ve/include" + +// RUN: %clangxx -### -target ve --sysroot %S/Inputs/basic_ve_tree %s \ +// RUN: -resource-dir=%S/Input/basic_ve_tree/resource_dir \ +// RUN: -nostdinc 2>&1 | FileCheck -check-prefix=NOSTDINC %s // NOSTDINC: clang{{.*}} "-cc1" -// NOSTDINC: "-nobuiltininc" -// NOSTDINC-NOT: "-internal-isystem" "{{.*}}/lib/clang/{{[0-9.]*}}/include/c++/v1" -// NOSTDINC-NOT: "-internal-isystem" "{{.*}}/lib/clang/{{[0-9.]*}}/include" -// NOSTDINC-NOT: "-internal-isystem" "/opt/nec/ve/include" - -// RUN: %clangxx -### -target ve %s -nostdinc++ 2>&1 | \ -// RUN: FileCheck -check-prefix=NOSTDINCXX %s +// NOSTDINC-SAME: "-nobuiltininc" +// NOSTDINC-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]" +// NOSTDINC-SAME: "-isysroot" "[[SYSROOT:[^"]+]]" +// NOSTDINC-NOT: "-internal-isystem" "[[RESOURCE_DIR]]/include/c++/v1" +// NOSTDINC-NOT: "-internal-isystem" "[[RESOURCE_DIR]]/include" +// NOSTDINC-NOT: "-internal-isystem" "[[SYSROOT]]/opt/nec/ve/include" + +// RUN: %clangxx -### -target ve --sysroot %S/Inputs/basic_ve_tree %s \ +// RUN: -resource-dir=%S/Input/basic_ve_tree/resource_dir \ +// RUN: -nostdinc++ 2>&1 | FileCheck -check-prefix=NOSTDINCXX %s // NOSTDINCXX: clang{{.*}} "-cc1" -// NOSTDINCXX: "-nostdinc++" -// NOSTDINCXX-NOT: "-internal-isystem" "{{.*}}/lib/clang/{{[0-9.]*}}/include/c++/v1" -// NOSTDINCXX: "-internal-isystem" "{{.*}}/lib/clang/{{[0-9.]*}}/include" -// NOSTDINCXX: "-internal-isystem" "/opt/nec/ve/include" +// NOSTDINCXX-SAME: "-nostdinc++" +// NOSTDINCXX-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]" +// NOSTDINCXX-SAME: "-isysroot" "[[SYSROOT:[^"]+]]" +// NOSTDINCXX-NOT: "-internal-isystem" "[[RESOURCE_DIR]]/include/c++/v1" +// NOSTDINCXX-SAME: "-internal-isystem" "[[RESOURCE_DIR]]/include" +// NOSTDINCXX-SAME: "-internal-isystem" "[[SYSROOT]]/opt/nec/ve/include" ///----------------------------------------------------------------------------- /// Checking environment variable NCC_CPLUS_INCLUDE_PATH // RUN: env NCC_CPLUS_INCLUDE_PATH=/test/test %clangxx -### -target ve %s \ -// RUN: 2>&1 | FileCheck -check-prefix=DEFINCENV %s +// RUN: --sysroot %S/Inputs/basic_ve_tree \ +// RUN: -resource-dir=%S/Input/basic_ve_tree/resource_dir \ +// RUN: 2>&1 | FileCheck -check-prefix=DEFINCENV %s // DEFINCENV: clang{{.*}} "-cc1" -// DEFINCENV: "-nostdsysteminc" -// DEFINCENV: "-internal-isystem" "/test/test" -// DEFINCENV: "-internal-isystem" "{{.*}}/lib/clang/{{[0-9.]*}}/include" -// DEFINCENV: "-internal-isystem" "/opt/nec/ve/include" - -///----------------------------------------------------------------------------- -/// Checking -fuse-init-array - -// RUN: %clangxx -### -target ve %s 2>&1 | FileCheck -check-prefix=DEFINITARRAY %s -// DEFINITARRAY: clang{{.*}} "-cc1" -// DEFINITARRAY-NOT: "-fuse-init-array" - -// RUN: %clangxx -### -target ve %s -fno-use-init-array 2>&1 | \ -// RUN: FileCheck -check-prefix=NOTINITARRAY %s -// NOTINITARRAY: clang{{.*}} "-cc1" -// NOTINITARRAY: "-fno-use-init-array" +// DEFINCENV-SAME: "-nostdsysteminc" +// DEFINCENV-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]" +// DEFINCENV-SAME: "-isysroot" "[[SYSROOT:[^"]+]]" +// DEFINCENV-SAME: "-internal-isystem" "/test/test" +// DEFINCENV-SAME: "-internal-isystem" "[[RESOURCE_DIR]]/include" +// DEFINCENV-SAME: "-internal-isystem" "[[SYSROOT]]/opt/nec/ve/include" ///----------------------------------------------------------------------------- /// Checking -faddrsig -// RUN: %clangxx -### -target ve %s 2>&1 | FileCheck -check-prefix=DEFADDESIG %s -// DEFADDESIG: clang{{.*}} "-cc1" -// DEFADDESIG-NOT: "-faddrsig" - -///----------------------------------------------------------------------------- -/// Checking exceptions - -// RUN: %clangxx -### -target ve %s 2>&1 | FileCheck -check-prefix=DEFEXCEPTION %s -// DEFEXCEPTION: clang{{.*}} "-cc1" -// DEFEXCEPTION: "-fsjlj-exceptions" +// RUN: %clangxx -### -target ve %s 2>&1 | FileCheck -check-prefix=DEFADDRSIG %s +// DEFADDRSIG: clang{{.*}} "-cc1" +// DEFADDRSIG-NOT: "-faddrsig" ///----------------------------------------------------------------------------- -/// Passing -fintegrated-as +/// Checking -fintegrated-as // RUN: %clangxx -### -target ve -x assembler %s 2>&1 | \ -// RUN: FileCheck -check-prefix=AS_LINK %s +// RUN: FileCheck -check-prefix=AS %s // RUN: %clangxx -### -target ve -fno-integrated-as -x assembler %s 2>&1 | \ -// RUN: FileCheck -check-prefix=NAS_LINK %s +// RUN: FileCheck -check-prefix=NAS %s -// AS_LINK: clang{{.*}} "-cc1as" -// AS_LINK: nld{{.*}} +// AS: clang{{.*}} "-cc1as" +// AS: nld{{.*}} -// NAS_LINK: nas{{.*}} -// NAS_LINK: nld{{.*}} +// NAS: nas{{.*}} +// NAS: nld{{.*}} ///----------------------------------------------------------------------------- -/// Checking default libraries - -// RUN: %clangxx -### -target ve --stdlib=c++ %s 2>&1 | \ -// RUN: FileCheck -check-prefix=LINK %s - -// LINK: nld" -// LINK-SAME: "-dynamic-linker" "/opt/nec/ve/lib/ld-linux-ve.so.1" -// LINK-SAME: "{{[^"]*}}crt1.o" "{{[^"]*}}crti.o"{{.*}}"crtbegin.o"{{.*}}"-lc++" "-lc++abi" "-lunwind" "-lpthread" "-ldl" +/// Checking default behavior: +/// - dynamic linker +/// - library paths +/// - nld VE specific options +/// - sjlj exception + +// RUN: %clangxx -### -target ve-unknown-linux-gnu \ +// RUN: --sysroot %S/Inputs/basic_ve_tree \ +// RUN: -resource-dir=%S/Inputs/basic_ve_tree/resource_dir \ +// RUN: --stdlib=c++ %s 2>&1 | FileCheck -check-prefix=DEF %s + +// DEF: clang{{.*}}" "-cc1" +// DEF-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]" +// DEF-SAME: "-isysroot" "[[SYSROOT:[^"]+]]" +// DEF-SAME: "-fsjlj-exceptions" +// DEF: nld" +// DEF-SAME: "--sysroot=[[SYSROOT]]" +// DEF-SAME: "-dynamic-linker" "/opt/nec/ve/lib/ld-linux-ve.so.1" +// DEF-SAME: "[[SYSROOT]]/opt/nec/ve/lib/crt1.o" +// DEF-SAME: "[[SYSROOT]]/opt/nec/ve/lib/crti.o" +// DEF-SAME: "-z" "max-page-size=0x4000000" +// DEF-SAME: "[[RESOURCE_DIR]]/lib/linux/clang_rt.crtbegin-ve.o" +// DEF-SAME: "-lc++" "-lc++abi" "-lunwind" "-lpthread" "-ldl" +// DEF-SAME: "[[RESOURCE_DIR]]/lib/linux/libclang_rt.builtins-ve.a" "-lc" +// DEF-SAME: "[[RESOURCE_DIR]]/lib/linux/libclang_rt.builtins-ve.a" +// DEF-SAME: "[[RESOURCE_DIR]]/lib/linux/clang_rt.crtend-ve.o" +// DEF-SAME: "[[SYSROOT]]/opt/nec/ve/lib/crtn.o" diff --git a/llvm/lib/Analysis/BasicAliasAnalysis.cpp b/llvm/lib/Analysis/BasicAliasAnalysis.cpp index 9ba61ad6417843..3e22ce84d1814e 100644 --- a/llvm/lib/Analysis/BasicAliasAnalysis.cpp +++ b/llvm/lib/Analysis/BasicAliasAnalysis.cpp @@ -1288,8 +1288,12 @@ AliasResult BasicAAResult::aliasGEP( if (V1Size.hasValue() && V2Size.hasValue()) { // Try to determine whether abs(VarIndex) > 0. Optional MinAbsVarIndex; - // TODO: Could handle single non-zero index as well. - if (DecompGEP1.VarIndices.size() == 2) { + if (DecompGEP1.VarIndices.size() == 1) { + // VarIndex = Scale*V. If V != 0 then abs(VarIndex) >= abs(Scale). + const VariableGEPIndex &Var = DecompGEP1.VarIndices[0]; + if (isKnownNonZero(Var.V, DL)) + MinAbsVarIndex = Var.Scale.abs(); + } else if (DecompGEP1.VarIndices.size() == 2) { // VarIndex = Scale*V0 + (-Scale)*V1. // If V0 != V1 then abs(VarIndex) >= abs(Scale). // Check that VisitedPhiBBs is empty, to avoid reasoning about diff --git a/llvm/test/Analysis/BasicAA/bug.23626.ll b/llvm/test/Analysis/BasicAA/bug.23626.ll index 9a4641ef58e3de..9df3d5767db867 100644 --- a/llvm/test/Analysis/BasicAA/bug.23626.ll +++ b/llvm/test/Analysis/BasicAA/bug.23626.ll @@ -4,9 +4,9 @@ target triple = "x86_64-apple-darwin13.4.0" ; CHECK-LABEL: compute1 ; CHECK: MayAlias: i32* %arrayidx8, i32* %out -; CHECK: MayAlias: i32* %arrayidx11, i32* %out +; CHECK: NoAlias: i32* %arrayidx11, i32* %out ; CHECK: MayAlias: i32* %arrayidx11, i32* %arrayidx8 -; CHECK: MayAlias: i32* %arrayidx14, i32* %out +; CHECK: NoAlias: i32* %arrayidx14, i32* %out ; CHECK: MayAlias: i32* %arrayidx14, i32* %arrayidx8 ; CHECK: MayAlias: i32* %arrayidx11, i32* %arrayidx14 define void @compute1(i32 %num.0.lcssa, i32* %out) { diff --git a/llvm/test/Analysis/BasicAA/sequential-gep.ll b/llvm/test/Analysis/BasicAA/sequential-gep.ll index 2b61b5327c1061..b6e84fa971380e 100644 --- a/llvm/test/Analysis/BasicAA/sequential-gep.ll +++ b/llvm/test/Analysis/BasicAA/sequential-gep.ll @@ -111,10 +111,9 @@ define void @add_non_zero_with_offset(i32* %p, i32 %addend, i32* %q) { } ; CHECK-LABEL: non_zero_index_simple -; CHECK: MayAlias: i32* %gep, i32* %p -; CHECK: MayAlias: i16* %gep.16, i32* %p +; CHECK: NoAlias: i32* %gep, i32* %p +; CHECK: NoAlias: i16* %gep.16, i32* %p ; CHECK: MayAlias: i32* %p, i64* %gep.64 -; TODO: First two could be NoAlias. define void @non_zero_index_simple(i32* %p, i32* %q) { %knownnonzero = load i32, i32* %q, !range !0 %gep = getelementptr i32, i32* %p, i32 %knownnonzero @@ -125,8 +124,7 @@ define void @non_zero_index_simple(i32* %p, i32* %q) { ; CHECK-LABEL: non_zero_index_with_offset ; CHECK: MayAlias: i32* %gep, i32* %p -; CHECK: MayAlias: i16* %gep.16, i32* %p -; TODO: Last could be NoAlias. +; CHECK: NoAlias: i16* %gep.16, i32* %p define void @non_zero_index_with_offset(i32* %p, i32* %q) { %knownnonzero = load i32, i32* %q, !range !0 %p.8 = bitcast i32* %p to i8*