207 lines · plain
1; RUN: llc -mtriple aarch64-apple-darwin -O0 -global-isel -verify-machineinstrs %s -o - 2>&1 | FileCheck %s2target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"3target triple = "arm64-apple-ios13.0.0"4 5@t_val = thread_local global i32 0, align 46@.str = private unnamed_addr constant [5 x i8] c"str1\00", align 17@str1 = global ptr @.str, align 88@.str.1 = private unnamed_addr constant [5 x i8] c"str2\00", align 19@str2 = global ptr @.str.1, align 810@.str.2 = private unnamed_addr constant [5 x i8] c"str3\00", align 111@str3 = global ptr @.str.2, align 812@.str.3 = private unnamed_addr constant [5 x i8] c"str4\00", align 113@str4 = global ptr @.str.3, align 814@.str.4 = private unnamed_addr constant [5 x i8] c"str5\00", align 115@str5 = global ptr @.str.4, align 816@.str.5 = private unnamed_addr constant [5 x i8] c"str6\00", align 117@str6 = global ptr @.str.5, align 818@.str.6 = private unnamed_addr constant [5 x i8] c"str7\00", align 119@str7 = global ptr @.str.6, align 820@.str.7 = private unnamed_addr constant [5 x i8] c"str8\00", align 121@str8 = global ptr @.str.7, align 822@.str.8 = private unnamed_addr constant [5 x i8] c"str9\00", align 123@str9 = global ptr @.str.8, align 824@.str.9 = private unnamed_addr constant [6 x i8] c"str10\00", align 125@str10 = global ptr @.str.9, align 826@.str.10 = private unnamed_addr constant [4 x i8] c"%s\0A\00", align 127@.str.11 = private unnamed_addr constant [4 x i8] c"%d\0A\00", align 128@.str.12 = private unnamed_addr constant [4 x i8] c"xyz\00", align 129 30 31; This test checks that we don't re-use the register for the variable descriptor32; for the second ldr.33; CHECK: adrp x[[PTR1:[0-9]+]], _t_val@TLVPPAGE34; CHECK: ldr x0, [x[[PTR1]], _t_val@TLVPPAGEOFF]35; CHECK: ldr x[[FPTR:[0-9]+]], [x0]36; CHECK: blr x[[FPTR]]37 38define void @_Z4funcPKc(ptr %id) {39entry:40 %id.addr = alloca ptr, align 841 store ptr %id, ptr %id.addr, align 842 %0 = load ptr, ptr %id.addr, align 843 %1 = load ptr, ptr @str1, align 844 %cmp = icmp eq ptr %0, %145 br i1 %cmp, label %if.then, label %if.else46 47if.then: ; preds = %entry48 %2 = load ptr, ptr @str1, align 849 %call = call i32 (ptr, ...) @printf(ptr @.str.10, ptr %2)50 %3 = load ptr, ptr @str2, align 851 %call1 = call i32 (ptr, ...) @printf(ptr @.str.10, ptr %3)52 %4 = load ptr, ptr @str3, align 853 %call2 = call i32 (ptr, ...) @printf(ptr @.str.10, ptr %4)54 %5 = load ptr, ptr @str4, align 855 %call3 = call i32 (ptr, ...) @printf(ptr @.str.10, ptr %5)56 %6 = load ptr, ptr @str5, align 857 %call4 = call i32 (ptr, ...) @printf(ptr @.str.10, ptr %6)58 %7 = load ptr, ptr @str6, align 859 %call5 = call i32 (ptr, ...) @printf(ptr @.str.10, ptr %7)60 %8 = load ptr, ptr @str7, align 861 %call6 = call i32 (ptr, ...) @printf(ptr @.str.10, ptr %8)62 %9 = load ptr, ptr @str8, align 863 %call7 = call i32 (ptr, ...) @printf(ptr @.str.10, ptr %9)64 %10 = load ptr, ptr @str9, align 865 %call8 = call i32 (ptr, ...) @printf(ptr @.str.10, ptr %10)66 %11 = load ptr, ptr @str10, align 867 %call9 = call i32 (ptr, ...) @printf(ptr @.str.10, ptr %11)68 %12 = load i32, ptr @t_val, align 469 %call10 = call i32 (ptr, ...) @printf(ptr @.str.11, i32 %12)70 br label %if.end5671 72if.else: ; preds = %entry73 %13 = load ptr, ptr %id.addr, align 874 %14 = load ptr, ptr @str2, align 875 %cmp11 = icmp eq ptr %13, %1476 br i1 %cmp11, label %if.then12, label %if.else2477 78if.then12: ; preds = %if.else79 %15 = load ptr, ptr @str1, align 880 %call13 = call i32 (ptr, ...) @printf(ptr @.str.10, ptr %15)81 %16 = load ptr, ptr @str2, align 882 %call14 = call i32 (ptr, ...) @printf(ptr @.str.10, ptr %16)83 %17 = load ptr, ptr @str3, align 884 %call15 = call i32 (ptr, ...) @printf(ptr @.str.10, ptr %17)85 %18 = load ptr, ptr @str4, align 886 %call16 = call i32 (ptr, ...) @printf(ptr @.str.10, ptr %18)87 %19 = load ptr, ptr @str5, align 888 %call17 = call i32 (ptr, ...) @printf(ptr @.str.10, ptr %19)89 %20 = load ptr, ptr @str6, align 890 %call18 = call i32 (ptr, ...) @printf(ptr @.str.10, ptr %20)91 %21 = load ptr, ptr @str7, align 892 %call19 = call i32 (ptr, ...) @printf(ptr @.str.10, ptr %21)93 %22 = load ptr, ptr @str8, align 894 %call20 = call i32 (ptr, ...) @printf(ptr @.str.10, ptr %22)95 %23 = load ptr, ptr @str9, align 896 %call21 = call i32 (ptr, ...) @printf(ptr @.str.10, ptr %23)97 %24 = load ptr, ptr @str10, align 898 %call22 = call i32 (ptr, ...) @printf(ptr @.str.10, ptr %24)99 %25 = load i32, ptr @t_val, align 4100 %call23 = call i32 (ptr, ...) @printf(ptr @.str.11, i32 %25)101 br label %if.end55102 103if.else24: ; preds = %if.else104 %26 = load ptr, ptr %id.addr, align 8105 %27 = load ptr, ptr @str3, align 8106 %cmp25 = icmp eq ptr %26, %27107 br i1 %cmp25, label %if.then26, label %if.else27108 109if.then26: ; preds = %if.else24110 br label %if.end54111 112if.else27: ; preds = %if.else24113 %28 = load ptr, ptr %id.addr, align 8114 %29 = load ptr, ptr @str4, align 8115 %cmp28 = icmp eq ptr %28, %29116 br i1 %cmp28, label %if.then29, label %if.else30117 118if.then29: ; preds = %if.else27119 br label %if.end53120 121if.else30: ; preds = %if.else27122 %30 = load ptr, ptr %id.addr, align 8123 %31 = load ptr, ptr @str5, align 8124 %cmp31 = icmp eq ptr %30, %31125 br i1 %cmp31, label %if.then32, label %if.else33126 127if.then32: ; preds = %if.else30128 br label %if.end52129 130if.else33: ; preds = %if.else30131 %32 = load ptr, ptr %id.addr, align 8132 %33 = load ptr, ptr @str6, align 8133 %cmp34 = icmp eq ptr %32, %33134 br i1 %cmp34, label %if.then35, label %if.else36135 136if.then35: ; preds = %if.else33137 br label %if.end51138 139if.else36: ; preds = %if.else33140 %34 = load ptr, ptr %id.addr, align 8141 %35 = load ptr, ptr @str7, align 8142 %cmp37 = icmp eq ptr %34, %35143 br i1 %cmp37, label %if.then38, label %if.else39144 145if.then38: ; preds = %if.else36146 br label %if.end50147 148if.else39: ; preds = %if.else36149 %36 = load ptr, ptr %id.addr, align 8150 %37 = load ptr, ptr @str8, align 8151 %cmp40 = icmp eq ptr %36, %37152 br i1 %cmp40, label %if.then41, label %if.else42153 154if.then41: ; preds = %if.else39155 br label %if.end49156 157if.else42: ; preds = %if.else39158 %38 = load ptr, ptr %id.addr, align 8159 %39 = load ptr, ptr @str9, align 8160 %cmp43 = icmp eq ptr %38, %39161 br i1 %cmp43, label %if.then44, label %if.else45162 163if.then44: ; preds = %if.else42164 br label %if.end48165 166if.else45: ; preds = %if.else42167 %40 = load ptr, ptr %id.addr, align 8168 %41 = load ptr, ptr @str10, align 8169 %cmp46 = icmp eq ptr %40, %41170 br i1 %cmp46, label %if.then47, label %if.end171 172if.then47: ; preds = %if.else45173 br label %if.end174 175if.end: ; preds = %if.then47, %if.else45176 br label %if.end48177 178if.end48: ; preds = %if.end, %if.then44179 br label %if.end49180 181if.end49: ; preds = %if.end48, %if.then41182 br label %if.end50183 184if.end50: ; preds = %if.end49, %if.then38185 br label %if.end51186 187if.end51: ; preds = %if.end50, %if.then35188 br label %if.end52189 190if.end52: ; preds = %if.end51, %if.then32191 br label %if.end53192 193if.end53: ; preds = %if.end52, %if.then29194 br label %if.end54195 196if.end54: ; preds = %if.end53, %if.then26197 br label %if.end55198 199if.end55: ; preds = %if.end54, %if.then12200 br label %if.end56201 202if.end56: ; preds = %if.end55, %if.then203 ret void204}205declare i32 @printf(ptr, ...)206 207