brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.1 KiB · 33090c1 Raw
117 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes='sroa<preserve-cfg>' -S | FileCheck %s --check-prefixes=CHECK,CHECK-PRESERVE-CFG3; RUN: opt < %s -passes='sroa<modify-cfg>' -S | FileCheck %s --check-prefixes=CHECK,CHECK-MODIFY-CFG4 5declare i8 @gen.i8()6declare ptr @gen.ptr()7 8define i8 @store(i8 %init, i1 %cond, ptr dereferenceable(4) %escape) {9; CHECK-PRESERVE-CFG-LABEL: @store(10; CHECK-PRESERVE-CFG-NEXT:  entry:11; CHECK-PRESERVE-CFG-NEXT:    [[TMP:%.*]] = alloca i8, align 412; CHECK-PRESERVE-CFG-NEXT:    store i8 [[INIT:%.*]], ptr [[TMP]], align 413; CHECK-PRESERVE-CFG-NEXT:    [[REINIT:%.*]] = call i8 @gen.i8()14; CHECK-PRESERVE-CFG-NEXT:    [[ADDR:%.*]] = select i1 [[COND:%.*]], ptr [[TMP]], ptr [[ESCAPE:%.*]]15; CHECK-PRESERVE-CFG-NEXT:    store i8 [[REINIT]], ptr [[ADDR]], align 416; CHECK-PRESERVE-CFG-NEXT:    [[TMP_0_RES:%.*]] = load i8, ptr [[TMP]], align 417; CHECK-PRESERVE-CFG-NEXT:    ret i8 [[TMP_0_RES]]18;19; CHECK-MODIFY-CFG-LABEL: @store(20; CHECK-MODIFY-CFG-NEXT:  entry:21; CHECK-MODIFY-CFG-NEXT:    [[REINIT:%.*]] = call i8 @gen.i8()22; CHECK-MODIFY-CFG-NEXT:    br i1 [[COND:%.*]], label [[ENTRY_THEN:%.*]], label [[ENTRY_ELSE:%.*]]23; CHECK-MODIFY-CFG:       entry.then:24; CHECK-MODIFY-CFG-NEXT:    br label [[ENTRY_CONT:%.*]]25; CHECK-MODIFY-CFG:       entry.else:26; CHECK-MODIFY-CFG-NEXT:    store i8 [[REINIT]], ptr [[ESCAPE:%.*]], align 427; CHECK-MODIFY-CFG-NEXT:    br label [[ENTRY_CONT]]28; CHECK-MODIFY-CFG:       entry.cont:29; CHECK-MODIFY-CFG-NEXT:    [[TMP_0:%.*]] = phi i8 [ [[REINIT]], [[ENTRY_THEN]] ], [ [[INIT:%.*]], [[ENTRY_ELSE]] ]30; CHECK-MODIFY-CFG-NEXT:    ret i8 [[TMP_0]]31;32entry:33  %tmp = alloca i8, align 434  store i8 %init, ptr %tmp, align 435  %reinit = call i8 @gen.i8()36  %addr = select i1 %cond, ptr %tmp, ptr %escape37  store i8 %reinit, ptr %addr, align 438  %res = load i8, ptr %tmp, align 439  ret i8 %res40}41 42define ptr @store_of_addr(ptr %init, i1 %cond, ptr %other.ptr, ptr dereferenceable(4) %escape.dest) {43; CHECK-LABEL: @store_of_addr(44; CHECK-NEXT:  entry:45; CHECK-NEXT:    [[TMP:%.*]] = alloca ptr, align 446; CHECK-NEXT:    store ptr [[INIT:%.*]], ptr [[TMP]], align 447; CHECK-NEXT:    [[REINIT:%.*]] = call ptr @gen.ptr()48; CHECK-NEXT:    [[ADDR:%.*]] = select i1 [[COND:%.*]], ptr [[TMP]], ptr [[OTHER_PTR:%.*]]49; CHECK-NEXT:    store ptr [[ADDR]], ptr [[ESCAPE_DEST:%.*]], align 450; CHECK-NEXT:    [[RES:%.*]] = load ptr, ptr [[TMP]], align 451; CHECK-NEXT:    ret ptr [[RES]]52;53entry:54  %tmp = alloca ptr, align 455  store ptr %init, ptr %tmp, align 456  %reinit = call ptr @gen.ptr()57  %addr = select i1 %cond, ptr %tmp, ptr %other.ptr58  store ptr %addr, ptr %escape.dest, align 459  %res = load ptr, ptr %tmp, align 460  ret ptr %res61}62 63define i8 @store_atomic_unord(i8 %init, i1 %cond, ptr dereferenceable(4) %escape) {64; CHECK-PRESERVE-CFG-LABEL: @store_atomic_unord(65; CHECK-PRESERVE-CFG-NEXT:  entry:66; CHECK-PRESERVE-CFG-NEXT:    [[TMP:%.*]] = alloca i8, align 467; CHECK-PRESERVE-CFG-NEXT:    store i8 [[INIT:%.*]], ptr [[TMP]], align 468; CHECK-PRESERVE-CFG-NEXT:    [[REINIT:%.*]] = call i8 @gen.i8()69; CHECK-PRESERVE-CFG-NEXT:    [[ADDR:%.*]] = select i1 [[COND:%.*]], ptr [[TMP]], ptr [[ESCAPE:%.*]]70; CHECK-PRESERVE-CFG-NEXT:    store atomic i8 [[REINIT]], ptr [[ADDR]] unordered, align 471; CHECK-PRESERVE-CFG-NEXT:    [[TMP_0_RES:%.*]] = load i8, ptr [[TMP]], align 472; CHECK-PRESERVE-CFG-NEXT:    ret i8 [[TMP_0_RES]]73;74; CHECK-MODIFY-CFG-LABEL: @store_atomic_unord(75; CHECK-MODIFY-CFG-NEXT:  entry:76; CHECK-MODIFY-CFG-NEXT:    [[REINIT:%.*]] = call i8 @gen.i8()77; CHECK-MODIFY-CFG-NEXT:    br i1 [[COND:%.*]], label [[ENTRY_THEN:%.*]], label [[ENTRY_ELSE:%.*]]78; CHECK-MODIFY-CFG:       entry.then:79; CHECK-MODIFY-CFG-NEXT:    br label [[ENTRY_CONT:%.*]]80; CHECK-MODIFY-CFG:       entry.else:81; CHECK-MODIFY-CFG-NEXT:    store atomic i8 [[REINIT]], ptr [[ESCAPE:%.*]] unordered, align 482; CHECK-MODIFY-CFG-NEXT:    br label [[ENTRY_CONT]]83; CHECK-MODIFY-CFG:       entry.cont:84; CHECK-MODIFY-CFG-NEXT:    [[TMP_0:%.*]] = phi i8 [ [[REINIT]], [[ENTRY_THEN]] ], [ [[INIT:%.*]], [[ENTRY_ELSE]] ]85; CHECK-MODIFY-CFG-NEXT:    ret i8 [[TMP_0]]86;87entry:88  %tmp = alloca i8, align 489  store i8 %init, ptr %tmp, align 490  %reinit = call i8 @gen.i8()91  %addr = select i1 %cond, ptr %tmp, ptr %escape92  store atomic i8 %reinit, ptr %addr unordered, align 493  %res = load i8, ptr %tmp, align 494  ret i8 %res95}96 97define i8 @store_volatile(i8 %init, i1 %cond, ptr dereferenceable(4) %escape) {98; CHECK-LABEL: @store_volatile(99; CHECK-NEXT:  entry:100; CHECK-NEXT:    [[TMP:%.*]] = alloca i8, align 4101; CHECK-NEXT:    store i8 [[INIT:%.*]], ptr [[TMP]], align 4102; CHECK-NEXT:    [[REINIT:%.*]] = call i8 @gen.i8()103; CHECK-NEXT:    [[ADDR:%.*]] = select i1 [[COND:%.*]], ptr [[TMP]], ptr [[ESCAPE:%.*]]104; CHECK-NEXT:    store volatile i8 [[REINIT]], ptr [[ADDR]], align 4105; CHECK-NEXT:    [[TMP_0_RES:%.*]] = load i8, ptr [[TMP]], align 4106; CHECK-NEXT:    ret i8 [[TMP_0_RES]]107;108entry:109  %tmp = alloca i8, align 4110  store i8 %init, ptr %tmp, align 4111  %reinit = call i8 @gen.i8()112  %addr = select i1 %cond, ptr %tmp, ptr %escape113  store volatile i8 %reinit, ptr %addr, align 4114  %res = load i8, ptr %tmp, align 4115  ret i8 %res116}117