mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 04:32:44 +01:00
8382ecd17d
As the actual MSVC toolset doesn't use the GAS-style assembly that Clang/LLVM produces and consumes, there's no reference for what string to use for e.g. comments when building with a MSVC triple. This frees up the use of semicolon as separator string, just like was done for GNU targets in 23413195649d0cf6f3860ae8b5fb115b35032075. (Previously, both the separator and comment strings were set to the same, a semicolon.) Compiler-rt extensively uses separator chars in its assembly, and that assembly should be buildable with clang-cl for MSVC too. Differential Revision: https://reviews.llvm.org/D96259
55 lines
2.0 KiB
LLVM
55 lines
2.0 KiB
LLVM
; RUN: llc -o - %s -mtriple=aarch64-windows -verify-machineinstrs | FileCheck %s
|
|
|
|
; Make sure we don't have a base pointer.
|
|
; CHECK-LABEL: "?a@@YAXXZ":
|
|
; CHECK-NOT: x19
|
|
|
|
; Check that we compute the address relative to fp.
|
|
; CHECK-LABEL: "?catch$2@?0??a@@YAXXZ@4HA":
|
|
; CHECK: stp x29, x30, [sp, #-16]! // 16-byte Folded Spill
|
|
; CHECK-NEXT: .seh_save_fplr_x 16
|
|
; CHECK-NEXT: .seh_endprologue
|
|
; CHECK-NEXT: sub x0, x29, #16 // =16
|
|
; CHECK-NEXT: mov x1, xzr
|
|
; CHECK-NEXT: bl "?bb@@YAXPEAHH@Z"
|
|
; CHECK-NEXT: adrp x0, .LBB0_1
|
|
; CHECK-NEXT: add x0, x0, .LBB0_1
|
|
; CHECK-NEXT: .seh_startepilogue
|
|
; CHECK-NEXT: ldp x29, x30, [sp], #16 // 16-byte Folded Reload
|
|
; CHECK-NEXT: .seh_save_fplr_x 16
|
|
; CHECK-NEXT: .seh_endepilogue
|
|
; CHECK-NEXT: ret
|
|
|
|
target datalayout = "e-m:w-p:64:64-i32:32-i64:64-i128:128-n32:64-S128"
|
|
target triple = "aarch64-unknown-windows-msvc19.11.0"
|
|
|
|
define dso_local void @"?a@@YAXXZ"(i64 %p1) personality i8* bitcast (i32 (...)* @__CxxFrameHandler3 to i8*) {
|
|
entry:
|
|
%a = alloca i32, align 16
|
|
%0 = bitcast i32* %a to i8*
|
|
store i32 305419896, i32* %a, align 16
|
|
invoke void @"?bb@@YAXPEAHH@Z"(i32* nonnull %a, i32* null)
|
|
to label %try.cont unwind label %catch.dispatch
|
|
|
|
catch.dispatch: ; preds = %entry
|
|
%1 = catchswitch within none [label %catch] unwind to caller
|
|
|
|
catch: ; preds = %catch.dispatch
|
|
%2 = catchpad within %1 [i8* null, i32 64, i8* null]
|
|
call void @"?bb@@YAXPEAHH@Z"(i32* nonnull %a, i32* null) [ "funclet"(token %2) ]
|
|
catchret from %2 to label %try.cont
|
|
|
|
try.cont: ; preds = %entry, %catch
|
|
call void @"?cc@@YAXXZ"()
|
|
ret void
|
|
}
|
|
|
|
declare void @llvm.memset.p0i8.i64(i8* nocapture writeonly, i8, i64, i1)
|
|
|
|
declare dso_local void @"?bb@@YAXPEAHH@Z"(i32*, i32*)
|
|
|
|
declare dso_local i32 @__CxxFrameHandler3(...)
|
|
|
|
declare dso_local void @"?cc@@YAXXZ"()
|
|
|