brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.6 KiB · 48e3cbf Raw
103 lines · plain
1; RUN: llc < %s -mtriple=avr -filetype=asm | FileCheck %s -check-prefix=CHECK-ASM2; RUN: llc < %s -mtriple=avr -filetype=obj | llvm-objdump -Dr - \3; RUN:                                   | FileCheck %s -check-prefix=CHECK-OBJ4 5; Somewhat pruned test case from rustc using trait objects6 7%TraitObjectA = type {}8 9; CHECK-ASM-LABEL: vtable.0:10; CHECK-ASM-NEXT: .short pm(drop_in_place2)11; CHECK-ASM-NEXT: .short 012; CHECK-ASM-NEXT: .short 113; CHECK-ASM-NEXT: .short pm(trait_fn2)14 15; CHECK-OBJ-LABEL: <vtable.0>:16; CHECK-OBJ-NEXT: 00 0017; CHECK-OBJ-NEXT: R_AVR_16_PM  .text18; CHECK-OBJ-NEXT: 00 0019; CHECK-OBJ-NEXT: 01 00 00 0020; CHECK-OBJ-NEXT: R_AVR_16_PM  .text21@vtable.0 = private constant {22    ptr addrspace(1),23    i16,24    i16,25    ptr addrspace(1)26  } {27    ptr addrspace(1)28      @drop_in_place2,29    i16 0,30    i16 1,31    ptr addrspace(1)32      @trait_fn233  }, align 134 35; CHECK-ASM-LABEL: vtable.1:36; CHECK-ASM-NEXT: .short pm(drop_in_place1)37; CHECK-ASM-NEXT: .short 038; CHECK-ASM-NEXT: .short 139; CHECK-ASM-NEXT: .short pm(trait_fn1)40 41; CHECK-OBJ-LABEL: <vtable.1>:42; CHECK-OBJ-NEXT: 00 0043; CHECK-OBJ-NEXT: R_AVR_16_PM  .text44; CHECK-OBJ-NEXT: 00 0045; CHECK-OBJ-NEXT: 01 00 00 0046; CHECK-OBJ-NEXT: R_AVR_16_PM  .text47@vtable.1 = private constant {48    ptr addrspace(1),49    i16,50    i16,51    ptr addrspace(1)52  } {53    ptr addrspace(1)54      @drop_in_place1,55    i16 0,56    i16 1,57    ptr addrspace(1)58      @trait_fn159  }, align 160 61define internal fastcc i8 @TraitObjectA_method(i1 zeroext %choice) addrspace(1) {62start:63  %b = alloca %TraitObjectA, align 164 65  %c = select i1 %choice, ptr @vtable.0,66    ptr @vtable.167  %b2 = bitcast ptr %b to ptr68 69  %res = call fastcc addrspace(1) i8 @call_trait_object(ptr nonnull align 1 %b2, ptr noalias readonly align 1 dereferenceable(6) %c)70  ret i8 %res71}72 73define internal fastcc i8 @call_trait_object(ptr nonnull align 1 %a, ptr noalias nocapture readonly align 1 dereferenceable(6) %b) addrspace(1) {74start:75  %b2 = getelementptr inbounds [3 x i16], ptr %b, i16 0, i16 376  %c = bitcast ptr %b2 to ptr77  %d = load ptr addrspace(1), ptr %c, align 1, !invariant.load !1, !nonnull !178  %res = tail call addrspace(1) i8 %d(ptr nonnull align 1 %a)79  ret i8 %res80}81 82define internal void @drop_in_place1(ptr nocapture %a) addrspace(1) {83start:84  ret void85}86 87define internal i8 @trait_fn1(ptr noalias nocapture nonnull readonly align 1 %self) addrspace(1) {88start:89  ret i8 8990}91 92define internal void @drop_in_place2(ptr nocapture %a) addrspace(1) {93start:94  ret void95}96 97define internal i8 @trait_fn2(ptr noalias nocapture nonnull readonly align 1 %self) addrspace(1) {98start:99  ret i8 79100}101 102!1 = !{}103