mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
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 ##.
104 lines
4.0 KiB
Plaintext
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
|
|
}
|