brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.4 KiB · 41fed31 Raw
157 lines · c
1// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py2// REQUIRES: x86-registered-target3// RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -O0 -emit-llvm %s -o - | FileCheck %s4 5// CHECK-LABEL: @test0(6// CHECK-NEXT:  entry:7// CHECK-NEXT:    [[RET:%.*]] = alloca i32, align 48// CHECK-NEXT:    [[TMP0:%.*]] = callbr i32 asm "", "=r,!i,~{dirflag},~{fpsr},~{flags}"() #[[ATTR1:[0-9]+]]9// CHECK-NEXT:    to label [[ASM_FALLTHROUGH:%.*]] [label %z.split], !srcloc !210// CHECK:       asm.fallthrough:11// CHECK-NEXT:    store i32 [[TMP0]], ptr [[RET]], align 412// CHECK-NEXT:    store i32 42, ptr [[RET]], align 413// CHECK-NEXT:    br label [[Z:%.*]]14// CHECK:       z:15// CHECK-NEXT:    [[TMP1:%.*]] = load i32, ptr [[RET]], align 416// CHECK-NEXT:    ret i32 [[TMP1]]17// CHECK:       z.split:18// CHECK-NEXT:    store i32 [[TMP0]], ptr [[RET]], align 419// CHECK-NEXT:    br label [[Z]]20//21int test0 (void) {22  int ret;23  asm goto ("" : "=r"(ret):::z);24  ret = 42;25z:26  return ret;27}28 29// CHECK-LABEL: @test1(30// CHECK-NEXT:  entry:31// CHECK-NEXT:    [[RET:%.*]] = alloca i32, align 432// CHECK-NEXT:    [[B:%.*]] = alloca i32, align 433// CHECK-NEXT:    [[TMP0:%.*]] = callbr { i32, i32 } asm "", "=r,=r,!i,~{dirflag},~{fpsr},~{flags}"() #[[ATTR1]]34// CHECK-NEXT:    to label [[ASM_FALLTHROUGH:%.*]] [label %z.split], !srcloc !335// CHECK:       asm.fallthrough:36// CHECK-NEXT:    [[ASMRESULT:%.*]] = extractvalue { i32, i32 } [[TMP0]], 037// CHECK-NEXT:    [[ASMRESULT1:%.*]] = extractvalue { i32, i32 } [[TMP0]], 138// CHECK-NEXT:    store i32 [[ASMRESULT]], ptr [[RET]], align 439// CHECK-NEXT:    store i32 [[ASMRESULT1]], ptr [[B]], align 440// CHECK-NEXT:    store i32 42, ptr [[RET]], align 441// CHECK-NEXT:    br label [[Z:%.*]]42// CHECK:       z:43// CHECK-NEXT:    [[TMP1:%.*]] = load i32, ptr [[RET]], align 444// CHECK-NEXT:    ret i32 [[TMP1]]45// CHECK:       z.split:46// CHECK-NEXT:    [[ASMRESULT2:%.*]] = extractvalue { i32, i32 } [[TMP0]], 047// CHECK-NEXT:    [[ASMRESULT3:%.*]] = extractvalue { i32, i32 } [[TMP0]], 148// CHECK-NEXT:    store i32 [[ASMRESULT2]], ptr [[RET]], align 449// CHECK-NEXT:    store i32 [[ASMRESULT3]], ptr [[B]], align 450// CHECK-NEXT:    br label [[Z]]51//52int test1 (void) {53  int ret, b;54  asm goto ("" : "=r"(ret), "=r"(b):::z);55  ret = 42;56z:57  return ret;58}59 60// CHECK-LABEL: @test2(61// CHECK-NEXT:  entry:62// CHECK-NEXT:    [[RET:%.*]] = alloca i32, align 463// CHECK-NEXT:    [[B:%.*]] = alloca i32, align 464// CHECK-NEXT:    [[TMP0:%.*]] = callbr { i32, i32 } asm "", "=r,=r,!i,~{dirflag},~{fpsr},~{flags}"() #[[ATTR1]]65// CHECK-NEXT:    to label [[ASM_FALLTHROUGH:%.*]] [label %z.split], !srcloc !466// CHECK:       asm.fallthrough:67// CHECK-NEXT:    [[ASMRESULT:%.*]] = extractvalue { i32, i32 } [[TMP0]], 068// CHECK-NEXT:    [[ASMRESULT1:%.*]] = extractvalue { i32, i32 } [[TMP0]], 169// CHECK-NEXT:    store i32 [[ASMRESULT]], ptr [[RET]], align 470// CHECK-NEXT:    store i32 [[ASMRESULT1]], ptr [[B]], align 471// CHECK-NEXT:    [[TMP1:%.*]] = callbr { i32, i32 } asm "", "=r,=r,!i,~{dirflag},~{fpsr},~{flags}"() #[[ATTR1]]72// CHECK-NEXT:    to label [[ASM_FALLTHROUGH4:%.*]] [label %z.split9], !srcloc !573// CHECK:       asm.fallthrough4:74// CHECK-NEXT:    [[ASMRESULT5:%.*]] = extractvalue { i32, i32 } [[TMP1]], 075// CHECK-NEXT:    [[ASMRESULT6:%.*]] = extractvalue { i32, i32 } [[TMP1]], 176// CHECK-NEXT:    store i32 [[ASMRESULT5]], ptr [[RET]], align 477// CHECK-NEXT:    store i32 [[ASMRESULT6]], ptr [[B]], align 478// CHECK-NEXT:    br label [[Z:%.*]]79// CHECK:       z:80// CHECK-NEXT:    [[TMP2:%.*]] = load i32, ptr [[RET]], align 481// CHECK-NEXT:    ret i32 [[TMP2]]82// CHECK:       z.split:83// CHECK-NEXT:    [[ASMRESULT2:%.*]] = extractvalue { i32, i32 } [[TMP0]], 084// CHECK-NEXT:    [[ASMRESULT3:%.*]] = extractvalue { i32, i32 } [[TMP0]], 185// CHECK-NEXT:    store i32 [[ASMRESULT2]], ptr [[RET]], align 486// CHECK-NEXT:    store i32 [[ASMRESULT3]], ptr [[B]], align 487// CHECK-NEXT:    br label [[Z]]88// CHECK:       z.split9:89// CHECK-NEXT:    [[ASMRESULT7:%.*]] = extractvalue { i32, i32 } [[TMP1]], 090// CHECK-NEXT:    [[ASMRESULT8:%.*]] = extractvalue { i32, i32 } [[TMP1]], 191// CHECK-NEXT:    store i32 [[ASMRESULT7]], ptr [[RET]], align 492// CHECK-NEXT:    store i32 [[ASMRESULT8]], ptr [[B]], align 493// CHECK-NEXT:    br label [[Z]]94//95int test2 (void) {96  int ret, b;97  asm goto ("" : "=r"(ret), "=r"(b):::z);98  asm goto ("" : "=r"(ret), "=r"(b):::z);99z:100  return ret;101}102// CHECK-LABEL: @test3(103// CHECK-NEXT:  entry:104// CHECK-NEXT:    [[RETVAL:%.*]] = alloca i32, align 4105// CHECK-NEXT:    [[OUT1_ADDR:%.*]] = alloca i32, align 4106// CHECK-NEXT:    store i32 [[OUT1:%.*]], ptr [[OUT1_ADDR]], align 4107// CHECK-NEXT:    [[TMP0:%.*]] = callbr i32 asm "", "=r,!i,!i,~{dirflag},~{fpsr},~{flags}"() #[[ATTR1]]108// CHECK-NEXT:    to label [[ASM_FALLTHROUGH:%.*]] [label [[LABEL_TRUE_SPLIT:%.*]], label %loop.split], !srcloc !6109// CHECK:       asm.fallthrough:110// CHECK-NEXT:    store i32 [[TMP0]], ptr [[OUT1_ADDR]], align 4111// CHECK-NEXT:    store i32 0, ptr [[RETVAL]], align 4112// CHECK-NEXT:    br label [[RETURN:%.*]]113// CHECK:       label_true.split:114// CHECK-NEXT:    store i32 [[TMP0]], ptr [[OUT1_ADDR]], align 4115// CHECK-NEXT:    br label [[LABEL_TRUE:%.*]]116// CHECK:       loop.split:117// CHECK-NEXT:    store i32 [[TMP0]], ptr [[OUT1_ADDR]], align 4118// CHECK-NEXT:    br label [[LOOP:%.*]]119// CHECK:       loop:120// CHECK-NEXT:    store i32 0, ptr [[RETVAL]], align 4121// CHECK-NEXT:    br label [[RETURN]]122// CHECK:       label_true:123// CHECK-NEXT:    store i32 1, ptr [[RETVAL]], align 4124// CHECK-NEXT:    br label [[RETURN]]125// CHECK:       return:126// CHECK-NEXT:    [[TMP1:%.*]] = load i32, ptr [[RETVAL]], align 4127// CHECK-NEXT:    ret i32 [[TMP1]]128//129int test3 (int out1) {130  asm goto("" : "=r"(out1)::: label_true, loop);131  return 0;132loop:133  return 0;134label_true:135  return 1;136}137 138// CHECK-LABEL: @test4(139// CHECK-NEXT:  entry:140// CHECK-NEXT:    [[X:%.*]] = alloca i32, align 4141// CHECK-NEXT:    br label [[FOO:%.*]]142// CHECK:       foo:143// CHECK-NEXT:    [[TMP0:%.*]] = callbr i32 asm "", "=r,!i,~{dirflag},~{fpsr},~{flags}"() #[[ATTR1]]144// CHECK-NEXT:    to label [[ASM_FALLTHROUGH:%.*]] [label %foo.split], !srcloc !7145// CHECK:       asm.fallthrough:146// CHECK-NEXT:    store i32 [[TMP0]], ptr [[X]], align 4147// CHECK-NEXT:    ret void148// CHECK:       foo.split:149// CHECK-NEXT:    store i32 [[TMP0]], ptr [[X]], align 4150// CHECK-NEXT:    br label [[FOO]]151//152void test4 (void) {153  int x;154foo:155  asm goto ("" : "=r"(x):::foo);156}157