brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.8 KiB · 014fff9 Raw
104 lines · plain
1; RUN: llc -mtriple aarch64-unknown-windows-msvc -filetype asm -o - %s | FileCheck %s -check-prefixes=CHECK,DAG-ISEL2; RUN: llc -mtriple aarch64-unknown-windows-msvc -fast-isel -filetype asm -o - %s | FileCheck %s -check-prefixes=CHECK,FAST-ISEL3; RUN: llc -mtriple aarch64-unknown-windows-msvc -verify-machineinstrs -O0 -filetype asm -o - %s | FileCheck %s -check-prefixes=CHECK,GLOBAL-ISEL,GLOBAL-ISEL-FALLBACK4 5@var = external dllimport global i326@ext = external global i327declare dllimport i32 @external()8declare i32 @internal()9 10define i32 @get_var() {11  %1 = load i32, ptr @var, align 412  ret i32 %113}14 15; CHECK-LABEL: get_var16; CHECK: adrp x8, __imp_var17; CHECK: ldr x8, [x8, :lo12:__imp_var]18; CHECK: ldr w0, [x8]19; CHECK: ret20 21define i32 @get_ext() {22  %1 = load i32, ptr @ext, align 423  ret i32 %124}25 26; CHECK-LABEL: get_ext27; CHECK: adrp x8, ext28; DAG-ISEL: ldr w0, [x8, :lo12:ext]29; FAST-ISEL: add x8, x8, :lo12:ext30; FAST-ISEL: ldr w0, [x8]31; GLOBAL-ISEL-FALLBACK: ldr w0, [x8, :lo12:ext]32; CHECK: ret33 34define ptr @get_var_pointer() {35  ret ptr @var36}37 38; CHECK-LABEL: get_var_pointer39; CHECK: adrp [[REG1:x[0-9]+]], __imp_var40; CHECK: ldr {{x[0-9]+}}, [[[REG1]], :lo12:__imp_var]41; CHECK: ret42 43define i32 @call_external() {44  %call = tail call i32 @external()45  ret i32 %call46}47 48; CHECK-LABEL: call_external49; CHECK: adrp x0, __imp_external50; CHECK: ldr x0, [x0, :lo12:__imp_external]51; CHECK: br x052 53define i32 @call_internal() {54  %call = tail call i32 @internal()55  ret i32 %call56}57 58; CHECK-LABEL: call_internal59; DAG-ISEL: b internal60; FAST-ISEL: b internal61; GLOBAL-ISEL: b internal62 63define void @call_try_catch() personality ptr @__gxx_personality_seh0 {64entry:65  invoke void @myFunc()66          to label %try.cont unwind label %lpad67 68lpad:                                             ; preds = %entry69  %0 = landingpad { ptr, i32 }70          catch ptr @_ZTIi71  %1 = extractvalue { ptr, i32 } %0, 172  %2 = tail call i32 @llvm.eh.typeid.for(ptr nonnull @_ZTIi) #173  %matches = icmp eq i32 %1, %274  br i1 %matches, label %catch, label %eh.resume75 76catch:                                            ; preds = %lpad77  %3 = extractvalue { ptr, i32 } %0, 078  %4 = tail call ptr @__cxa_begin_catch(ptr %3) #179  tail call void @__cxa_end_catch() #180  br label %try.cont81 82try.cont:                                         ; preds = %entry, %catch83  ret void84 85eh.resume:                                        ; preds = %lpad86  resume { ptr, i32 } %087}88 89; CHECK-LABEL: call_try_catch90; CHECK: adrp x8, __imp_myFunc91; CHECK: ldr x8, [x8, :lo12:__imp_myFunc]92; CHECK: blr x893 94declare dllimport void @myFunc()95 96@_ZTIi = external constant ptr97declare dso_local i32 @__gxx_personality_seh0(...)98declare i32 @llvm.eh.typeid.for(ptr) #099declare dso_local ptr @__cxa_begin_catch(ptr)100declare dso_local void @__cxa_end_catch()101 102attributes #0 = { nounwind memory(none) }103attributes #1 = { nounwind }104