xref: /llvm-project/llvm/test/Transforms/InstCombine/multiple-uses-load-bitcast-select.ll (revision 2f3ae2f625588ea5eb1393db10b83e9e18380770)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt < %s -passes=instcombine -S -data-layout="E-m:e-i1:8:16-i8:8:16-i64:64-f128:64-v128:64-a:8:16-n32:64" | FileCheck %s
3
4define void @PR35618(ptr %st1, ptr %st2) {
5; CHECK-LABEL: @PR35618(
6; CHECK-NEXT:    [[Y1:%.*]] = alloca double, align 8
7; CHECK-NEXT:    [[Z1:%.*]] = alloca double, align 8
8; CHECK-NEXT:    [[LD1:%.*]] = load double, ptr [[Y1]], align 8
9; CHECK-NEXT:    [[LD2:%.*]] = load double, ptr [[Z1]], align 8
10; CHECK-NEXT:    [[TMP:%.*]] = fcmp olt double [[LD1]], [[LD2]]
11; CHECK-NEXT:    [[TMP12_V:%.*]] = select i1 [[TMP]], double [[LD1]], double [[LD2]]
12; CHECK-NEXT:    store double [[TMP12_V]], ptr [[ST1:%.*]], align 8
13; CHECK-NEXT:    store double [[TMP12_V]], ptr [[ST2:%.*]], align 8
14; CHECK-NEXT:    ret void
15;
16  %y1 = alloca double
17  %z1 = alloca double
18  %ld1 = load double, ptr %y1
19  %ld2 = load double, ptr %z1
20  %tmp = fcmp olt double %ld1, %ld2
21  %sel = select i1 %tmp, ptr %y1, ptr %z1
22  %tmp12 = load i64, ptr %sel
23  store i64 %tmp12, ptr %st1
24  store i64 %tmp12, ptr %st2
25  ret void
26}
27
28define void @PR35618_asan(ptr %st1, ptr %st2) sanitize_address {
29; CHECK-LABEL: @PR35618_asan(
30; CHECK-NEXT:    [[Y1:%.*]] = alloca double, align 8
31; CHECK-NEXT:    [[Z1:%.*]] = alloca double, align 8
32; CHECK-NEXT:    [[LD1:%.*]] = load double, ptr [[Y1]], align 8
33; CHECK-NEXT:    [[LD2:%.*]] = load double, ptr [[Z1]], align 8
34; CHECK-NEXT:    [[TMP:%.*]] = fcmp olt double [[LD1]], [[LD2]]
35; CHECK-NEXT:    [[TMP12_V:%.*]] = select i1 [[TMP]], double [[LD1]], double [[LD2]]
36; CHECK-NEXT:    store double [[TMP12_V]], ptr [[ST1:%.*]], align 8
37; CHECK-NEXT:    store double [[TMP12_V]], ptr [[ST2:%.*]], align 8
38; CHECK-NEXT:    ret void
39;
40  %y1 = alloca double
41  %z1 = alloca double
42  %ld1 = load double, ptr %y1
43  %ld2 = load double, ptr %z1
44  %tmp = fcmp olt double %ld1, %ld2
45  %sel = select i1 %tmp, ptr %y1, ptr %z1
46  %tmp12 = load i64, ptr %sel
47  store i64 %tmp12, ptr %st1
48  store i64 %tmp12, ptr %st2
49  ret void
50}
51
52