brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.1 KiB · 8e7ab38 Raw
124 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 52; RUN: opt < %s -passes='inferattrs,alloc-token<mode=increment>' -S | FileCheck %s3 4target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"5 6define ptr @test_invoke_malloc() sanitize_alloc_token personality ptr @__gxx_personality_v0 {7; CHECK-LABEL: define ptr @test_invoke_malloc(8; CHECK-SAME: ) #[[ATTR0:[0-9]+]] personality ptr @__gxx_personality_v0 {9; CHECK-NEXT:  [[ENTRY:.*:]]10; CHECK-NEXT:    [[TMP0:%.*]] = invoke ptr @__alloc_token_malloc(i64 64, i64 0)11; CHECK-NEXT:            to label %[[NORMAL:.*]] unwind label %[[CLEANUP:.*]]12; CHECK:       [[NORMAL]]:13; CHECK-NEXT:    ret ptr [[TMP0]]14; CHECK:       [[CLEANUP]]:15; CHECK-NEXT:    [[LP:%.*]] = landingpad { ptr, i32 }16; CHECK-NEXT:            cleanup17; CHECK-NEXT:    ret ptr null18;19entry:20  %ptr = invoke ptr @malloc(i64 64) to label %normal unwind label %cleanup21 22normal:23  ret ptr %ptr24 25cleanup:26  %lp = landingpad { ptr, i32 } cleanup27  ret ptr null28}29 30define ptr @test_invoke_operator_new() sanitize_alloc_token personality ptr @__gxx_personality_v0 {31; CHECK-LABEL: define ptr @test_invoke_operator_new(32; CHECK-SAME: ) #[[ATTR0]] personality ptr @__gxx_personality_v0 {33; CHECK-NEXT:  [[ENTRY:.*:]]34; CHECK-NEXT:    [[TMP0:%.*]] = invoke ptr @__alloc_token__Znwm(i64 32, i64 1)35; CHECK-NEXT:            to label %[[NORMAL:.*]] unwind label %[[CLEANUP:.*]]36; CHECK:       [[NORMAL]]:37; CHECK-NEXT:    ret ptr [[TMP0]]38; CHECK:       [[CLEANUP]]:39; CHECK-NEXT:    [[LP:%.*]] = landingpad { ptr, i32 }40; CHECK-NEXT:            cleanup41; CHECK-NEXT:    ret ptr null42;43entry:44  %ptr = invoke ptr @_Znwm(i64 32) to label %normal unwind label %cleanup45 46normal:47  ret ptr %ptr48 49cleanup:50  %lp = landingpad { ptr, i32 } cleanup51  ret ptr null52}53 54; Test complex exception flow with multiple invoke allocations55define ptr @test_complex_invoke_flow() sanitize_alloc_token personality ptr @__gxx_personality_v0 {56; CHECK-LABEL: define ptr @test_complex_invoke_flow(57; CHECK-SAME: ) #[[ATTR0]] personality ptr @__gxx_personality_v0 {58; CHECK-NEXT:  [[ENTRY:.*:]]59; CHECK-NEXT:    [[TMP0:%.*]] = invoke ptr @__alloc_token_malloc(i64 16, i64 2)60; CHECK-NEXT:            to label %[[FIRST_OK:.*]] unwind label %[[CLEANUP1:.*]]61; CHECK:       [[FIRST_OK]]:62; CHECK-NEXT:    [[TMP1:%.*]] = invoke ptr @__alloc_token__Znwm(i64 32, i64 3)63; CHECK-NEXT:            to label %[[SECOND_OK:.*]] unwind label %[[CLEANUP2:.*]]64; CHECK:       [[SECOND_OK]]:65; CHECK-NEXT:    ret ptr [[TMP0]]66; CHECK:       [[CLEANUP1]]:67; CHECK-NEXT:    [[LP1:%.*]] = landingpad { ptr, i32 }68; CHECK-NEXT:            cleanup69; CHECK-NEXT:    ret ptr null70; CHECK:       [[CLEANUP2]]:71; CHECK-NEXT:    [[LP2:%.*]] = landingpad { ptr, i32 }72; CHECK-NEXT:            cleanup73; CHECK-NEXT:    ret ptr null74;75entry:76  %ptr1 = invoke ptr @malloc(i64 16) to label %first_ok unwind label %cleanup177 78first_ok:79  %ptr2 = invoke ptr @_Znwm(i64 32) to label %second_ok unwind label %cleanup280 81second_ok:82  ret ptr %ptr183 84cleanup1:85  %lp1 = landingpad { ptr, i32 } cleanup86  ret ptr null87 88cleanup2:89  %lp2 = landingpad { ptr, i32 } cleanup90  ret ptr null91}92 93; Test mixed call/invoke94define ptr @test_mixed_call_invoke() sanitize_alloc_token personality ptr @__gxx_personality_v0 {95; CHECK-LABEL: define ptr @test_mixed_call_invoke(96; CHECK-SAME: ) #[[ATTR0]] personality ptr @__gxx_personality_v0 {97; CHECK-NEXT:  [[ENTRY:.*:]]98; CHECK-NEXT:    [[TMP0:%.*]] = call ptr @__alloc_token_malloc(i64 8, i64 4)99; CHECK-NEXT:    [[TMP1:%.*]] = invoke ptr @__alloc_token_malloc(i64 16, i64 5)100; CHECK-NEXT:            to label %[[NORMAL:.*]] unwind label %[[CLEANUP:.*]]101; CHECK:       [[NORMAL]]:102; CHECK-NEXT:    ret ptr [[TMP0]]103; CHECK:       [[CLEANUP]]:104; CHECK-NEXT:    [[LP:%.*]] = landingpad { ptr, i32 }105; CHECK-NEXT:            cleanup106; CHECK-NEXT:    ret ptr null107;108entry:109  %ptr1 = call ptr @malloc(i64 8)110 111  %ptr2 = invoke ptr @malloc(i64 16) to label %normal unwind label %cleanup112 113normal:114  ret ptr %ptr1115 116cleanup:117  %lp = landingpad { ptr, i32 } cleanup118  ret ptr null119}120 121declare ptr @malloc(i64)122declare ptr @_Znwm(i64)123declare i32 @__gxx_personality_v0(...)124