Home | History | Annotate | Download | only in CodeGen
      1 // RUN: %clang_cc1 -triple armebv7-arm-none-eabi -emit-llvm -w -o - %s | FileCheck %s
      2 
      3 // this tests for AAPCS section 5.4:
      4 // A Composite Type not larger than 4 bytes is returned in r0.
      5 // The format is as if the result had been stored in memory at a
      6 // word-aligned address and then loaded into r0 with an LDR instruction
      7 
      8 extern union Us { short s; } us;
      9 union Us callee_us() { return us; }
     10 // CHECK-LABEL: callee_us()
     11 // CHECK: zext i16
     12 // CHECK: shl
     13 // CHECK: ret i32
     14 
     15 void caller_us() {
     16   us = callee_us();
     17 // CHECK-LABEL: caller_us()
     18 // CHECK: call i32
     19 // CHECK: lshr i32
     20 // CHECK: trunc i32
     21 }
     22 
     23 extern struct Ss { short s; } ss;
     24 struct Ss callee_ss() { return ss; }
     25 // CHECK-LABEL: callee_ss()
     26 // CHECK: zext i16
     27 // CHECK: shl
     28 // CHECK: ret i32
     29 
     30 void caller_ss() {
     31   ss = callee_ss();
     32 // CHECK-LABEL: caller_ss()
     33 // CHECK: call i32
     34 // CHECK: lshr i32
     35 // CHECK: trunc i32
     36 }
     37 
     38