Files
TheRock/compiler/amd-llvm/llvm/test/CodeGen/WebAssembly/stack-protector.ll
T
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

136 lines
4.4 KiB
LLVM

; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc -verify-machineinstrs -mtriple=wasm32-unknown-unknown < %s | FileCheck -check-prefix=WASM32 %s
@"\01LC" = internal constant [11 x i8] c"buf == %s\0A\00" ; <ptr> [#uses=1]
define void @test(ptr %a) nounwind ssp {
; WASM32-LABEL: test:
; WASM32: .functype test (i32) -> ()
; WASM32-NEXT: .local i32
; WASM32-NEXT: # %bb.0: # %entry
; WASM32-NEXT: global.get __stack_pointer
; WASM32-NEXT: i32.const 32
; WASM32-NEXT: i32.sub
; WASM32-NEXT: local.tee 1
; WASM32-NEXT: global.set __stack_pointer
; WASM32-NEXT: local.get 1
; WASM32-NEXT: local.get 0
; WASM32-NEXT: i32.store 16
; WASM32-NEXT: local.get 1
; WASM32-NEXT: i32.const 0
; WASM32-NEXT: i32.load __stack_chk_guard
; WASM32-NEXT: i32.store 28
; WASM32-NEXT: local.get 1
; WASM32-NEXT: i32.const 20
; WASM32-NEXT: i32.add
; WASM32-NEXT: local.get 0
; WASM32-NEXT: call strcpy
; WASM32-NEXT: drop
; WASM32-NEXT: local.get 1
; WASM32-NEXT: local.get 1
; WASM32-NEXT: i32.const 20
; WASM32-NEXT: i32.add
; WASM32-NEXT: i32.store 0
; WASM32-NEXT: i32.const LC
; WASM32-NEXT: local.get 1
; WASM32-NEXT: call printf
; WASM32-NEXT: drop
; WASM32-NEXT: block
; WASM32-NEXT: i32.const 0
; WASM32-NEXT: i32.load __stack_chk_guard
; WASM32-NEXT: local.get 1
; WASM32-NEXT: i32.load 28
; WASM32-NEXT: i32.eq
; WASM32-NEXT: br_if 0 # 0: down to label0
; WASM32-NEXT: # %bb.1: # %return
; WASM32-NEXT: call __stack_chk_fail
; WASM32-NEXT: unreachable
; WASM32-NEXT: .LBB0_2: # %return
; WASM32-NEXT: end_block # label0:
; WASM32-NEXT: local.get 1
; WASM32-NEXT: i32.const 32
; WASM32-NEXT: i32.add
; WASM32-NEXT: global.set __stack_pointer
; WASM32-NEXT: # fallthrough-return
entry:
%a_addr = alloca ptr ; <ptr> [#uses=2]
%buf = alloca [8 x i8] ; <ptr> [#uses=2]
%"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
store ptr %a, ptr %a_addr
%0 = load ptr, ptr %a_addr, align 4 ; <ptr> [#uses=1]
%1 = call ptr @strcpy(ptr %buf, ptr %0) nounwind ; <ptr> [#uses=0]
%2 = call i32 (ptr, ...) @printf(ptr @"\01LC", ptr %buf) nounwind ; <i32> [#uses=0]
br label %return
return: ; preds = %entry
ret void
}
define i32 @test_return_i32(ptr %a) nounwind ssp {
; WASM32-LABEL: test_return_i32:
; WASM32: .functype test_return_i32 (i32) -> (i32)
; WASM32-NEXT: .local i32
; WASM32-NEXT: # %bb.0: # %entry
; WASM32-NEXT: global.get __stack_pointer
; WASM32-NEXT: i32.const 32
; WASM32-NEXT: i32.sub
; WASM32-NEXT: local.tee 1
; WASM32-NEXT: global.set __stack_pointer
; WASM32-NEXT: local.get 1
; WASM32-NEXT: local.get 0
; WASM32-NEXT: i32.store 16
; WASM32-NEXT: local.get 1
; WASM32-NEXT: i32.const 0
; WASM32-NEXT: i32.load __stack_chk_guard
; WASM32-NEXT: i32.store 28
; WASM32-NEXT: local.get 1
; WASM32-NEXT: i32.const 20
; WASM32-NEXT: i32.add
; WASM32-NEXT: local.get 0
; WASM32-NEXT: call strcpy
; WASM32-NEXT: drop
; WASM32-NEXT: local.get 1
; WASM32-NEXT: local.get 1
; WASM32-NEXT: i32.const 20
; WASM32-NEXT: i32.add
; WASM32-NEXT: i32.store 0
; WASM32-NEXT: i32.const LC
; WASM32-NEXT: local.get 1
; WASM32-NEXT: call printf
; WASM32-NEXT: drop
; WASM32-NEXT: block
; WASM32-NEXT: i32.const 0
; WASM32-NEXT: i32.load __stack_chk_guard
; WASM32-NEXT: local.get 1
; WASM32-NEXT: i32.load 28
; WASM32-NEXT: i32.eq
; WASM32-NEXT: br_if 0 # 0: down to label1
; WASM32-NEXT: # %bb.1: # %return
; WASM32-NEXT: call __stack_chk_fail
; WASM32-NEXT: unreachable
; WASM32-NEXT: .LBB1_2: # %return
; WASM32-NEXT: end_block # label1:
; WASM32-NEXT: local.get 1
; WASM32-NEXT: i32.const 32
; WASM32-NEXT: i32.add
; WASM32-NEXT: global.set __stack_pointer
; WASM32-NEXT: i32.const 0
; WASM32-NEXT: # fallthrough-return
entry:
%a_addr = alloca ptr ; <ptr> [#uses=2]
%buf = alloca [8 x i8] ; <ptr> [#uses=2]
%"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
store ptr %a, ptr %a_addr
%0 = load ptr, ptr %a_addr, align 4 ; <ptr> [#uses=1]
%1 = call ptr @strcpy(ptr %buf, ptr %0) nounwind ; <ptr> [#uses=0]
%2 = call i32 (ptr, ...) @printf(ptr @"\01LC", ptr %buf) nounwind ; <i32> [#uses=0]
br label %return
return: ; preds = %entry
ret i32 0
}
declare ptr @strcpy(ptr, ptr) nounwind
declare i32 @printf(ptr, ...) nounwind