brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.3 KiB · f354163 Raw
83 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -S -passes=mergeicmps -verify-dom-info | FileCheck %s3target triple = "x86_64"4 5; First check that we try to from a memcmp.6define void @form_memcmp(ptr dereferenceable(16) %a, ptr dereferenceable(16) %b) {7; CHECK-LABEL: @form_memcmp(8; CHECK-NEXT:  bb0:9; CHECK-NEXT:    [[PTR_A1:%.*]] = getelementptr inbounds [2 x i64], ptr [[A:%.*]], i64 0, i64 110; CHECK-NEXT:    [[PTR_B1:%.*]] = getelementptr inbounds [2 x i64], ptr [[B:%.*]], i64 0, i64 111; CHECK-NEXT:    br label %"bb1+bb2"12; CHECK:       "bb1+bb2":13; CHECK-NEXT:    [[MEMCMP:%.*]] = call i32 @memcmp(ptr [[A]], ptr [[B]], i64 16)14; CHECK-NEXT:    [[TMP0:%.*]] = icmp eq i32 [[MEMCMP]], 015; CHECK-NEXT:    br label [[BB3:%.*]]16; CHECK:       bb3:17; CHECK-NEXT:    ret void18;19bb0:20  %ptr_a1 = getelementptr inbounds [2 x i64], ptr %a, i64 0, i64 121  %ptr_b1 = getelementptr inbounds [2 x i64], ptr %b, i64 0, i64 122  br label %bb123 24bb1:                                              ; preds = %bb025  %a0 = load i64, ptr %a26  %b0 = load i64, ptr %b27  %cond0 = icmp eq i64 %a0, %b028  br i1 %cond0, label %bb2, label %bb329 30bb2:                                              ; preds = %bb131  %a1 = load i64, ptr %ptr_a132  %b1 = load i64, ptr %ptr_b133  %cond1 = icmp eq i64 %a1, %b134  br label %bb335 36bb3:                                              ; preds = %bb2, %bb137  %necessary = phi i1 [ %cond1, %bb2 ], [ false, %bb1 ]38  ret void39}40 41; We can't use memcmp between arbitrary addressesspaces42define void @no_memcmp(ptr addrspace(11) dereferenceable(16) %a, ptr addrspace(11) dereferenceable(16) %b) {43; CHECK-LABEL: @no_memcmp(44; CHECK-NEXT:  bb0:45; CHECK-NEXT:    [[PTR_A1:%.*]] = getelementptr inbounds [2 x i64], ptr addrspace(11) [[A:%.*]], i64 0, i64 146; CHECK-NEXT:    [[PTR_B1:%.*]] = getelementptr inbounds [2 x i64], ptr addrspace(11) [[B:%.*]], i64 0, i64 147; CHECK-NEXT:    br label [[BB1:%.*]]48; CHECK:       bb1:49; CHECK-NEXT:    [[A0:%.*]] = load i64, ptr addrspace(11) [[A]], align 850; CHECK-NEXT:    [[B0:%.*]] = load i64, ptr addrspace(11) [[B]], align 851; CHECK-NEXT:    [[COND0:%.*]] = icmp eq i64 [[A0]], [[B0]]52; CHECK-NEXT:    br i1 [[COND0]], label [[BB2:%.*]], label [[BB3:%.*]]53; CHECK:       bb2:54; CHECK-NEXT:    [[A1:%.*]] = load i64, ptr addrspace(11) [[PTR_A1]], align 855; CHECK-NEXT:    [[B1:%.*]] = load i64, ptr addrspace(11) [[PTR_B1]], align 856; CHECK-NEXT:    [[COND1:%.*]] = icmp eq i64 [[A1]], [[B1]]57; CHECK-NEXT:    br label [[BB3]]58; CHECK:       bb3:59; CHECK-NEXT:    [[NECESSARY:%.*]] = phi i1 [ [[COND1]], [[BB2]] ], [ false, [[BB1]] ]60; CHECK-NEXT:    ret void61;62bb0:63  %ptr_a1 = getelementptr inbounds [2 x i64], ptr addrspace(11) %a, i64 0, i64 164  %ptr_b1 = getelementptr inbounds [2 x i64], ptr addrspace(11) %b, i64 0, i64 165  br label %bb166 67bb1:                                              ; preds = %bb068  %a0 = load i64, ptr addrspace(11) %a69  %b0 = load i64, ptr addrspace(11) %b70  %cond0 = icmp eq i64 %a0, %b071  br i1 %cond0, label %bb2, label %bb372 73bb2:                                              ; preds = %bb174  %a1 = load i64, ptr addrspace(11) %ptr_a175  %b1 = load i64, ptr addrspace(11) %ptr_b176  %cond1 = icmp eq i64 %a1, %b177  br label %bb378 79bb3:                                              ; preds = %bb2, %bb180  %necessary = phi i1 [ %cond1, %bb2 ], [ false, %bb1 ]81  ret void82}83