Files
swift-mirror/test/IRGen/condfail.sil
Daniel Rodríguez Troitiño 8c6bda7efd [android] Fix IRGen/condfail.sil test for Android ARMv7/AArch64.
For AArch64, the fix is duplicating the arm64 lines, since those are not
taken when testing Android/Linux which use AArch64 as the architecture.

For ARMv7, the change is supporting both trap and .inst 0xe7ffdefe.
According to llvm/lib/Target/ARM/ARMAsmPrinter.cpp, non-Darwin binutils
do not support the mnemonic trap, so an .inst is emitted instead. The
same instruction has to be used in both places, though.

For both architectures add the Android version of APP/NO_APP, which uses
@-symbols or // instead of ##.
2019-03-27 10:51:53 -07:00

104 lines
4.0 KiB
Plaintext

// RUN: %target-swift-frontend -primary-file %s -O -g -S | %FileCheck %s --check-prefix CHECK --check-prefix CHECK-%target-cpu --check-prefix CHECK-OPT-%target-os
// RUN: %target-swift-frontend -primary-file %s -g -S | %FileCheck %s --check-prefix CHECK --check-prefix CHECK-%target-cpu --check-prefix CHECK-NOOPT-%target-os
import Builtin
import Swift
// Make sure we emit two traps.
// CHECK-LABEL: test_cond_fail:
// CHECK-x86_64: {{.cfi_startproc|Lfunc_begin}}
// CHECK-i386: .cfi_startproc
// CHECK-arm64: .cfi_startproc
// CHECK-aarch64: .cfi_startproc
// CHECK-armv7: Lfunc_begin
// CHECK-armv7s: Lfunc_begin
// CHECK-powerpc64: .cfi_startproc
// CHECK-powerpc64le: .cfi_startproc
// CHECK-s390x: .cfi_startproc
// CHECK-OPT-macosx: ## InlineAsm Start
// CHECK-OPT-macosx: ## InlineAsm End
// CHECK-OPT-linux: ##APP
// CHECK-OPT-linux: ##NO_APP
// CHECK-OPT-windows: ##APP
// CHECK-OPT-windows: ##NO_APP
// CHECK-OPT-linux-androideabi: @APP
// CHECK-OPT-linux-androideabi: @NO_APP
// CHECK-OPT-linux-android: //APP
// CHECK-OPT-linux-android: //NO_APP
// CHECK-NOOPT-macosx-NOT: ## InlineAsm Start
// CHECK-NOOPT-macosx-NOT: ## InlineAsm End
// CHECK-NOOPT-linux-NOT: ##APP
// CHECK-NOOPT-linux-NOT: ##NO_APP
// CHECK-NOOPT-windows-NOT: ##APP
// CHECK-NOOPT-windows-NOT: ##NO_APP
// CHECK-OPT-linux-androideabi-NOT: @APP
// CHECK-OPT-linux-androideabi-NOT: @NO_APP
// CHECK-OPT-linux-android-NOT: //APP
// CHECK-OPT-linux-android-NOT: //NO_APP
// CHECK-x86_64: ud2
// CHECK-i386: ud2
// CHECK-arm64: brk
// CHECK-aarch64: brk
// CHECK-armv7: {{trap|.inst 0xe7ffdefe}}
// CHECK-armv7s: {{trap|.inst 0xe7ffdefe}}
// CHECK-powerpc64: trap
// CHECK-powerpc64le: trap
// CHECK-s390x: j .Ltmp{{[0-9]+}}+2
// CHECK-NOT-x86_64: {{.cfi_endproc|Lfunc_end}}
// CHECK-NOT-i386: .cfi_endproc
// CHECK-NOT-arm64: .cfi_endproc
// CHECK-NOT-aarch64: .cfi_endproc
// CHECK-NOT-armv7: Lfunc_end
// CHECK-NOT-armv7s: Lfunc_end
// CHECK-NOT-powerpc64: .cfi_endproc
// CHECK-NOT-powerpc64le: .cfi_endproc
// CHECK-NOT-s390x: .cfi_endproc
// CHECK-OPT-macosx: ## InlineAsm Start
// CHECK-OPT-macosx: ## InlineAsm End
// CHECK-OPT-linux: ##APP
// CHECK-OPT-linux: ##NO_APP
// CHECK-OPT-windows: ##APP
// CHECK-OPT-windows: ##NO_APP
// CHECK-NOOPT-macosx-NOT: ## InlineAsm Start
// CHECK-NOOPT-macosx-NOT: ## InlineAsm End
// CHECK-NOOPT-linux-NOT: ##APP
// CHECK-NOOPT-linux-NOT: ##NO_APP
// CHECK-NOOPT-windows-NOT: ##APP
// CHECK-NOOPT-windows-NOT: ##NO_APP
// CHECK-x86_64: ud2
// CHECK-i386: ud2
// CHECK-arm64: brk
// CHECK-aarch64: brk
// CHECK-armv7: {{trap|.inst 0xe7ffdefe}}
// CHECK-armv7s: {{trap|.inst 0xe7ffdefe}}
// CHECK-powerpc64: trap
// CHECK-powerpc64le: trap
// CHECK-s390x: j .Ltmp{{[0-9]+}}+2
// CHECK-x86_64: {{.cfi_endproc|Lfunc_end}}
// CHECK-i386: .cfi_endproc
// CHECK-arm64: .cfi_endproc
// CHECK-aarch64: .cfi_endproc
// CHECK-armv7: Lfunc_end
// CHECK-armv7s: Lfunc_end
// CHECK-powerpc64: .cfi_endproc
// CHECK-powerpc64le: .cfi_endproc
// CHECK-s390x: .cfi_endproc
sil hidden @test_cond_fail : $@convention(thin) (Int32) -> Int32 {
bb0(%0 : $Int32):
%2 = integer_literal $Builtin.Int32, 1
%3 = struct_extract %0 : $Int32, #Int32._value
%4 = integer_literal $Builtin.Int1, -1
%5 = builtin "sadd_with_overflow_Int32"(%3 : $Builtin.Int32, %2 : $Builtin.Int32, %4 : $Builtin.Int1) : $(Builtin.Int32, Builtin.Int1)
%6 = tuple_extract %5 : $(Builtin.Int32, Builtin.Int1), 0
%7 = tuple_extract %5 : $(Builtin.Int32, Builtin.Int1), 1
cond_fail %7 : $Builtin.Int1
%8 = builtin "sadd_with_overflow_Int32"(%6 : $Builtin.Int32, %2 : $Builtin.Int32, %4 : $Builtin.Int1) : $(Builtin.Int32, Builtin.Int1)
%9 = tuple_extract %8 : $(Builtin.Int32, Builtin.Int1), 0
%10 = tuple_extract %8 : $(Builtin.Int32, Builtin.Int1), 1
cond_fail %10 : $Builtin.Int1
%11 = struct $Int32 (%9 : $Builtin.Int32)
return %11 : $Int32
}