Index: lib/Driver/Tools.cpp =================================================================== --- lib/Driver/Tools.cpp +++ lib/Driver/Tools.cpp @@ -920,6 +920,10 @@ CmdArgs.push_back("-aarch64-fix-cortex-a53-835769=1"); else CmdArgs.push_back("-aarch64-fix-cortex-a53-835769=0"); + } else if (Triple.getEnvironment() == llvm::Triple::Android) { + // Enabled A53 errata (835769) workaround by default on android + CmdArgs.push_back("-backend-option"); + CmdArgs.push_back("-aarch64-fix-cortex-a53-835769=1"); } // Setting -mno-global-merge disables the codegen global merge pass. Setting Index: test/CodeGen/aarch64-fix-cortex-a53-835769.c =================================================================== --- /dev/null +++ test/CodeGen/aarch64-fix-cortex-a53-835769.c @@ -0,0 +1,27 @@ +// REQUIRES: aarch64-registered-target + +// RUN: %clang -O3 -target aarch64-linux-eabi %s -S -o- \ +// RUN: | FileCheck --check-prefix=CHECK-NO --check-prefix=CHECK %s +// RUN: %clang -O3 -target aarch64-linux-eabi -mfix-cortex-a53-835769 %s -S -o- 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-YES --check-prefix=CHECK %s +// RUN: %clang -O3 -target aarch64-linux-eabi -mno-fix-cortex-a53-835769 %s -S -o- 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-NO --check-prefix=CHECK %s + +// RUN: %clang -O3 -target aarch64-android-eabi %s -S -o- \ +// RUN: | FileCheck --check-prefix=CHECK-YES --check-prefix=CHECK %s +// RUN: %clang -O3 -target aarch64-android-eabi -mfix-cortex-a53-835769 %s -S -o- \ +// RUN: | FileCheck --check-prefix=CHECK-YES --check-prefix=CHECK %s +// RUN: %clang -O3 -target aarch64-android-eabi -mno-fix-cortex-a53-835769 %s -S -o- \ +// RUN: | FileCheck --check-prefix=CHECK-NO --check-prefix=CHECK %s + +typedef long int64_t; + +int64_t f_load_madd_64(int64_t a, int64_t b, int64_t *c) { + int64_t result = a+b*(*c); + return result; +} + +// CHECK: ldr +// CHECK-YES-NEXT: nop +// CHECK-NO-NEXT-NOT: nop +// CHECK-NEXT: madd Index: test/Driver/aarch64-fix-cortex-a53-835769-cg.c =================================================================== --- test/Driver/aarch64-fix-cortex-a53-835769-cg.c +++ /dev/null @@ -1,19 +0,0 @@ -// REQUIRES: aarch64-registered-target -// RUN: %clang -O3 -target aarch64-linux-eabi %s -S -o- \ -// RUN: | FileCheck --check-prefix=CHECK-NO --check-prefix=CHECK %s -// RUN: %clang -O3 -target aarch64-linux-eabi -mfix-cortex-a53-835769 %s -S -o- 2>&1 \ -// RUN: | FileCheck --check-prefix=CHECK-YES --check-prefix=CHECK %s -// RUN: %clang -O3 -target aarch64-linux-eabi -mno-fix-cortex-a53-835769 %s -S -o- 2>&1 \ -// RUN: | FileCheck --check-prefix=CHECK-NO --check-prefix=CHECK %s - -typedef long int64_t; - -int64_t f_load_madd_64(int64_t a, int64_t b, int64_t *c) { - int64_t result = a+b*(*c); - return result; -} - -// CHECK: ldr -// CHECK-YES-NEXT: nop -// CHECK-NO-NEXT-NOT: nop -// CHECK-NEXT: madd Index: test/Driver/aarch64-fix-cortex-a53-835769.c =================================================================== --- test/Driver/aarch64-fix-cortex-a53-835769.c +++ test/Driver/aarch64-fix-cortex-a53-835769.c @@ -4,6 +4,10 @@ // RUN: | FileCheck --check-prefix=CHECK-YES %s // RUN: %clang -target aarch64-linux-eabi -mno-fix-cortex-a53-835769 %s -### 2>&1 \ // RUN: | FileCheck --check-prefix=CHECK-NO %s + +// RUN: %clang -target aarch64-android-eabi %s -### 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-YES %s + // CHECK-DEF-NOT: "-backend-option" "-aarch64-fix-cortex-a53-835769" // CHECK-YES: "-backend-option" "-aarch64-fix-cortex-a53-835769=1" // CHECK-NO: "-backend-option" "-aarch64-fix-cortex-a53-835769=0"