193 lines · plain
1; Test that adjustSubwordCmp() maintains the chains properly when creating a2; new extending load.3;4; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 -O3 | FileCheck %s5 6@g_56 = external hidden unnamed_addr global i64, align 87@func_22.l_91 = external hidden unnamed_addr constant [4 x [7 x ptr]], align 88@g_102 = external hidden unnamed_addr global ptr, align 89@.str = external hidden unnamed_addr constant [2 x i8], align 210@.str.1 = external hidden unnamed_addr constant [15 x i8], align 211@crc32_context = external hidden unnamed_addr global i32, align 412@crc32_tab = external hidden unnamed_addr global [256 x i32], align 413@.str.2 = external hidden unnamed_addr constant [36 x i8], align 214@.str.3 = external hidden unnamed_addr constant [15 x i8], align 215@g_181.0.4.5 = external hidden unnamed_addr global i1, align 216 17; Function Attrs: argmemonly nounwind18declare void @llvm.lifetime.start.p0(i64, ptr nocapture) #019 20; Function Attrs: argmemonly nounwind21declare void @llvm.memcpy.p0.p0.i64(ptr nocapture writeonly, ptr nocapture readonly, i64, i1) #022 23; Function Attrs: argmemonly nounwind24declare void @llvm.lifetime.end.p0(i64, ptr nocapture) #025 26; Function Attrs: nounwind27define signext i32 @main(i32 signext, ptr nocapture readonly) local_unnamed_addr #1 {28 %3 = alloca [4 x [7 x ptr]], align 829 %4 = icmp eq i32 %0, 230 br i1 %4, label %5, label %1131 32; <label>:5: ; preds = %233 %6 = getelementptr inbounds ptr, ptr %1, i64 134 %7 = load ptr, ptr %6, align 835 %8 = tail call signext i32 @strcmp(ptr %7, ptr @.str) #436 %9 = icmp eq i32 %8, 037 %10 = zext i1 %9 to i3238 br label %1139 40; <label>:11: ; preds = %5, %241 %12 = phi i32 [ 0, %2 ], [ %10, %5 ]42 br label %1343 44; <label>:13: ; preds = %13, %1145 %14 = phi i64 [ 0, %11 ], [ %58, %13 ]46 %15 = phi <4 x i32> [ <i32 0, i32 1, i32 2, i32 3>, %11 ], [ %59, %13 ]47 %16 = and <4 x i32> %15, <i32 1, i32 1, i32 1, i32 1>48 %17 = icmp eq <4 x i32> %16, zeroinitializer49 %18 = lshr <4 x i32> %15, <i32 1, i32 1, i32 1, i32 1>50 %19 = xor <4 x i32> %18, <i32 -306674912, i32 -306674912, i32 -306674912, i32 -306674912>51 %20 = select <4 x i1> %17, <4 x i32> %18, <4 x i32> %1952 %21 = and <4 x i32> %20, <i32 1, i32 1, i32 1, i32 1>53 %22 = icmp eq <4 x i32> %21, zeroinitializer54 %23 = lshr <4 x i32> %20, <i32 1, i32 1, i32 1, i32 1>55 %24 = xor <4 x i32> %23, <i32 -306674912, i32 -306674912, i32 -306674912, i32 -306674912>56 %25 = select <4 x i1> %22, <4 x i32> %23, <4 x i32> %2457 %26 = and <4 x i32> %25, <i32 1, i32 1, i32 1, i32 1>58 %27 = icmp eq <4 x i32> %26, zeroinitializer59 %28 = lshr <4 x i32> %25, <i32 1, i32 1, i32 1, i32 1>60 %29 = xor <4 x i32> %28, <i32 -306674912, i32 -306674912, i32 -306674912, i32 -306674912>61 %30 = select <4 x i1> %27, <4 x i32> %28, <4 x i32> %2962 %31 = and <4 x i32> %30, <i32 1, i32 1, i32 1, i32 1>63 %32 = icmp eq <4 x i32> %31, zeroinitializer64 %33 = lshr <4 x i32> %30, <i32 1, i32 1, i32 1, i32 1>65 %34 = xor <4 x i32> %33, <i32 -306674912, i32 -306674912, i32 -306674912, i32 -306674912>66 %35 = select <4 x i1> %32, <4 x i32> %33, <4 x i32> %3467 %36 = and <4 x i32> %35, <i32 1, i32 1, i32 1, i32 1>68 %37 = icmp eq <4 x i32> %36, zeroinitializer69 %38 = lshr <4 x i32> %35, <i32 1, i32 1, i32 1, i32 1>70 %39 = xor <4 x i32> %38, <i32 -306674912, i32 -306674912, i32 -306674912, i32 -306674912>71 %40 = select <4 x i1> %37, <4 x i32> %38, <4 x i32> %3972 %41 = and <4 x i32> %40, <i32 1, i32 1, i32 1, i32 1>73 %42 = icmp eq <4 x i32> %41, zeroinitializer74 %43 = lshr <4 x i32> %40, <i32 1, i32 1, i32 1, i32 1>75 %44 = xor <4 x i32> %43, <i32 -306674912, i32 -306674912, i32 -306674912, i32 -306674912>76 %45 = select <4 x i1> %42, <4 x i32> %43, <4 x i32> %4477 %46 = and <4 x i32> %45, <i32 1, i32 1, i32 1, i32 1>78 %47 = icmp eq <4 x i32> %46, zeroinitializer79 %48 = lshr <4 x i32> %45, <i32 1, i32 1, i32 1, i32 1>80 %49 = xor <4 x i32> %48, <i32 -306674912, i32 -306674912, i32 -306674912, i32 -306674912>81 %50 = select <4 x i1> %47, <4 x i32> %48, <4 x i32> %4982 %51 = and <4 x i32> %50, <i32 1, i32 1, i32 1, i32 1>83 %52 = icmp eq <4 x i32> %51, zeroinitializer84 %53 = lshr <4 x i32> %50, <i32 1, i32 1, i32 1, i32 1>85 %54 = xor <4 x i32> %53, <i32 -306674912, i32 -306674912, i32 -306674912, i32 -306674912>86 %55 = select <4 x i1> %52, <4 x i32> %53, <4 x i32> %5487 %56 = getelementptr inbounds [256 x i32], ptr @crc32_tab, i64 0, i64 %1488 %57 = bitcast ptr %56 to ptr89 store <4 x i32> %55, ptr %57, align 490 %58 = add i64 %14, 491 %59 = add <4 x i32> %15, <i32 4, i32 4, i32 4, i32 4>92 %60 = icmp eq i64 %58, 25693 br i1 %60, label %61, label %1394 95; <label>:61: ; preds = %1396; CHECK-LABEL: %bb.6:97; CHECK: stgrl %r0, g_5698; CHECK: llhrl %r0, g_56+699; CHECK: stgrl %r2, g_56100 store i64 0, ptr @g_56, align 8101 %62 = bitcast ptr %3 to ptr102 call void @llvm.lifetime.start.p0(i64 224, ptr nonnull %62) #5103 call void @llvm.memcpy.p0.p0.i64(ptr align 8 nonnull %62, ptr align 8 @func_22.l_91, i64 224, i1 false) #5104 %63 = getelementptr inbounds [4 x [7 x ptr]], ptr %3, i64 0, i64 0, i64 2105 store ptr %63, ptr @g_102, align 8106 %64 = load i64, ptr @g_56, align 8107 store i64 2, ptr @g_56, align 8108 %65 = and i64 %64, 65535109 %66 = icmp eq i64 %65, 0110 br i1 %66, label %68, label %67111 112; <label>:67: ; preds = %61113 store i1 true, ptr @g_181.0.4.5, align 2114 br label %68115 116; <label>:68: ; preds = %67, %61117 call void @llvm.lifetime.end.p0(i64 224, ptr nonnull %62) #5118 %69 = load i1, ptr @g_181.0.4.5, align 2119 %70 = select i1 %69, i32 0, i32 72120 %71 = load i32, ptr @crc32_context, align 4121 %72 = lshr i32 %71, 8122 %73 = and i32 %71, 255123 %74 = xor i32 %73, %70124 %75 = zext i32 %74 to i64125 %76 = getelementptr inbounds [256 x i32], ptr @crc32_tab, i64 0, i64 %75126 %77 = load i32, ptr %76, align 4127 %78 = xor i32 %72, %77128 %79 = lshr i32 %78, 8129 %80 = and i32 %78, 255130 %81 = zext i32 %80 to i64131 %82 = getelementptr inbounds [256 x i32], ptr @crc32_tab, i64 0, i64 %81132 %83 = load i32, ptr %82, align 4133 %84 = xor i32 %79, %83134 %85 = lshr i32 %84, 8135 %86 = and i32 %84, 255136 %87 = zext i32 %86 to i64137 %88 = getelementptr inbounds [256 x i32], ptr @crc32_tab, i64 0, i64 %87138 %89 = load i32, ptr %88, align 4139 %90 = xor i32 %85, %89140 %91 = lshr i32 %90, 8141 %92 = and i32 %90, 255142 %93 = zext i32 %92 to i64143 %94 = getelementptr inbounds [256 x i32], ptr @crc32_tab, i64 0, i64 %93144 %95 = load i32, ptr %94, align 4145 %96 = xor i32 %91, %95146 %97 = lshr i32 %96, 8147 %98 = and i32 %96, 255148 %99 = zext i32 %98 to i64149 %100 = getelementptr inbounds [256 x i32], ptr @crc32_tab, i64 0, i64 %99150 %101 = load i32, ptr %100, align 4151 %102 = xor i32 %97, %101152 %103 = lshr i32 %102, 8153 %104 = and i32 %102, 255154 %105 = zext i32 %104 to i64155 %106 = getelementptr inbounds [256 x i32], ptr @crc32_tab, i64 0, i64 %105156 %107 = load i32, ptr %106, align 4157 %108 = xor i32 %103, %107158 %109 = lshr i32 %108, 8159 %110 = and i32 %108, 255160 %111 = zext i32 %110 to i64161 %112 = getelementptr inbounds [256 x i32], ptr @crc32_tab, i64 0, i64 %111162 %113 = load i32, ptr %112, align 4163 %114 = xor i32 %109, %113164 %115 = lshr i32 %114, 8165 %116 = and i32 %114, 255166 %117 = zext i32 %116 to i64167 %118 = getelementptr inbounds [256 x i32], ptr @crc32_tab, i64 0, i64 %117168 %119 = load i32, ptr %118, align 4169 %120 = xor i32 %115, %119170 store i32 %120, ptr @crc32_context, align 4171 %121 = icmp eq i32 %12, 0172 br i1 %121, label %127, label %122173 174; <label>:122: ; preds = %68175 %123 = xor i32 %120, -1176 %124 = zext i32 %123 to i64177 %125 = call signext i32 (ptr, ...) @printf(ptr @.str.2, ptr @.str.1, i64 %124) #5178 %126 = load i32, ptr @crc32_context, align 4179 br label %127180 181; <label>:127: ; preds = %122, %68182 %128 = phi i32 [ %120, %68 ], [ %126, %122 ]183 %129 = xor i32 %128, -1184 %130 = call signext i32 (ptr, ...) @printf(ptr @.str.3, i32 zeroext %129) #5185 ret i32 0186}187 188; Function Attrs: nounwind readonly189declare signext i32 @strcmp(ptr nocapture, ptr nocapture) local_unnamed_addr #2190 191; Function Attrs: nounwind192declare signext i32 @printf(ptr nocapture readonly, ...) local_unnamed_addr #3193