// *NOTE* This is an end to end test. Specifically, we are ensuring that the
// driver is properly generated -enable-aarch64-tbi and also that the frontend
// respects this option and that we get the proper tbi behavior.

// RUN: %swiftc_driver -parse-sil -Xfrontend -disable-legacy-type-info -target arm64-apple-ios8.0 -target-cpu cyclone \
// RUN:   -O -S %s -parse-as-library -parse-stdlib -module-name Swift \
// RUN:    | \
// RUN:   %FileCheck --check-prefix=TBI %s

// RUN: %swiftc_driver -parse-sil -Xfrontend -disable-legacy-type-info -target arm64-apple-ios7.0 -target-cpu cyclone \
// RUN:     -O -S %s -parse-as-library -parse-stdlib -module-name Swift \
// RUN:      | \
// RUN:   %FileCheck --check-prefix=NO_TBI %s

// REQUIRES: CODEGENERATOR=AArch64

// Verify that TBI is on by default in Swift on targets that support it. For our
// purposes this means iOS8.0 or later.

// NO_TBI-LABEL: .globl  _testTBI
// NO_TBI: _testTBI
// NO_TBI-NEXT: and
// NO_TBI-NEXT: ldr
// NO_TBI-NEXT: ret

// TBI-LABEL: .globl  _testTBI
// TBI: _testTBI:
// TBI-NEXT: ldr
// TBI-NEXT: ret

sil_stage canonical

import Builtin

sil [ossa] @testTBI : $@convention(thin) (Builtin.Int64) -> Builtin.Int64 {
bb0(%0 : $Builtin.Int64):
  %1 = integer_literal $Builtin.Int64, 0x00FFFFFFFFFFFFFF
  %2 = builtin "and_Int64"(%0 : $Builtin.Int64, %1 : $Builtin.Int64) : $Builtin.Int64
  %3 = builtin "inttoptr_Int64"(%2 : $Builtin.Int64) : $Builtin.RawPointer
  %4 = pointer_to_address %3 : $Builtin.RawPointer to [strict] $*Builtin.Int64
  %5 = load [trivial] %4 : $*Builtin.Int64
  return %5 : $Builtin.Int64
}
