brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.6 KiB · 84945e8 Raw
80 lines · c
1// REQUIRES: hexagon-registered-target2// RUN: %clang_cc1 -emit-llvm -triple hexagon-unknown-linux-musl %s -o - | FileCheck %s3#include <stdarg.h>4 5struct AAA {6  int x;7  int y;8  int z;9  int d;10};11 12// CHECK:   call void @llvm.va_start.p0(ptr %arraydecay)13// CHECK:   %arraydecay1 = getelementptr inbounds [1 x %struct.__va_list_tag],14// ptr %ap, i32 0, i32 015// CHECK:   br label %vaarg.maybe_reg16 17// CHECK: vaarg.maybe_reg:                                  ; preds = %entry18// CHECK:   %__current_saved_reg_area_pointer_p = getelementptr inbounds19// %struct.__va_list_tag, ptr %arraydecay2, i32 0, i32 020// CHECK:   %__current_saved_reg_area_pointer = load ptr, ptr21// %__current_saved_reg_area_pointer_p22// CHECK:   %__saved_reg_area_end_pointer_p = getelementptr inbounds23// %struct.__va_list_tag, ptr %arraydecay2, i32 0, i32 124// CHECK:   %__saved_reg_area_end_pointer = load ptr, ptr25// %__saved_reg_area_end_pointer_p26// CHECK:   %__new_saved_reg_area_pointer = getelementptr i8, ptr27// %__current_saved_reg_area_pointer, i32 428// CHECK:   %0 = icmp sgt ptr %__new_saved_reg_area_pointer,29// %__saved_reg_area_end_pointer30// CHECK:   br i1 %0, label %vaarg.on_stack, label %vaarg.in_reg31 32// CHECK: vaarg.in_reg:                                     ; preds =33// %vaarg.maybe_reg34// CHECK:   store ptr %__new_saved_reg_area_pointer, ptr35// %__current_saved_reg_area_pointer_p36// CHECK:   br label %vaarg.end37 38// CHECK: vaarg.on_stack:                                   ; preds =39// %vaarg.maybe_reg40// CHECK:   %__overflow_area_pointer_p = getelementptr inbounds41// %struct.__va_list_tag, ptr %arraydecay2, i32 0, i32 242// CHECK:   %__overflow_area_pointer = load ptr, ptr %__overflow_area_pointer_p43// CHECK:   %__overflow_area_pointer.next = getelementptr i8, ptr44// %__overflow_area_pointer, i32 445// CHECK:   store ptr %__overflow_area_pointer.next, ptr46// %__overflow_area_pointer_p47// CHECK:   store ptr %__overflow_area_pointer.next, ptr48// %__current_saved_reg_area_pointer_p49// CHECK:   br label %vaarg.end50 51// CHECK: vaarg.end:                                        ; preds =52// %vaarg.on_stack, %vaarg.in_reg53// CHECK:   %vaarg.addr = phi ptr [ %__current_saved_reg_area_pointer, %vaarg.in_reg ], [ %__overflow_area_pointer, %vaarg.on_stack54// ]55// CHECK:   %1 = load i32, ptr %vaarg.addr56 57struct AAA aaa = {100, 200, 300, 400};58 59int foo(int xx, ...) {60  va_list ap;61  int d;62  int ret = 0;63  struct AAA bbb;64  va_start(ap, xx);65  d = va_arg(ap, int);66  ret += d;67  bbb = va_arg(ap, struct AAA);68  ret += bbb.d;69  d = va_arg(ap, int);70  ret += d;71  va_end(ap);72  return ret;73}74 75int main(void) {76  int x;77  x = foo(1, 2, aaa, 4);78  return x;79}80