1target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" 2target triple = "x86_64-grtev4-linux-gnu" 3 4%struct.A = type { ptr } 5%struct.B = type { ptr } 6 7@_ZTV1B = linkonce_odr constant { [4 x ptr] } { [4 x ptr] [ptr null, ptr undef, ptr @_ZN1B1fEi, ptr @_ZN1B1nEi] }, !type !0 8 9$test = comdat any 10$testb = comdat any 11 12define linkonce_odr i32 @test(ptr %obj, i32 %a) comdat { 13entry: 14 %vtable5 = load ptr, ptr %obj 15 16 %0 = tail call { ptr, i1 } @llvm.type.checked.load(ptr %vtable5, i32 8, metadata !"_ZTS1A") 17 %1 = extractvalue { ptr, i1 } %0, 1 18 br i1 %1, label %cont, label %trap 19 20trap: 21 tail call void @llvm.trap() 22 unreachable 23 24cont: 25 %2 = extractvalue { ptr, i1 } %0, 0 26 27 %call = tail call i32 %2(ptr nonnull %obj, i32 %a) 28 29 ret i32 %call 30} 31 32define linkonce_odr i32 @testb(ptr %obj, i32 %a) comdat { 33entry: 34 %vtable5 = load ptr, ptr %obj 35 36 %0 = tail call { ptr, i1 } @llvm.type.checked.load(ptr %vtable5, i32 0, metadata !"_ZTS1A") 37 %1 = extractvalue { ptr, i1 } %0, 1 38 br i1 %1, label %cont, label %trap 39 40trap: 41 tail call void @llvm.trap() 42 unreachable 43 44cont: 45 %2 = extractvalue { ptr, i1 } %0, 0 46 47 %call = tail call i32 %2(ptr nonnull %obj, i32 %a) 48 49 ret i32 %call 50} 51 52declare { ptr, i1 } @llvm.type.checked.load(ptr, i32, metadata) 53declare void @llvm.trap() 54 55define internal i32 @_ZN1B1fEi(ptr %this, i32 %a) { 56entry: 57 ret i32 0 58} 59define internal i32 @_ZN1B1nEi(ptr %this, i32 %a) { 60entry: 61 ret i32 0 62} 63 64!0 = !{i64 16, !"_ZTS1B"} 65