| # REQUIRES: x86-registered-target |
| # RUN: llc -mtriple=x86_64-unknown-linux-gnu -run-pass=none -print-mir2vec -mir2vec-vocab-path=%S/Inputs/mir2vec_dummy_3D_vocab.json %s -o /dev/null 2>&1 | FileCheck %s |
| |
| --- | |
| target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" |
| |
| define dso_local i32 @abc(i32 noundef %a, i32 noundef %b) { |
| entry: |
| %retval = alloca i32, align 4 |
| %a.addr = alloca i32, align 4 |
| %b.addr = alloca i32, align 4 |
| store i32 %a, ptr %a.addr, align 4 |
| store i32 %b, ptr %b.addr, align 4 |
| %0 = load i32, ptr %a.addr, align 4 |
| %1 = load i32, ptr %b.addr, align 4 |
| %cmp = icmp sgt i32 %0, %1 |
| br i1 %cmp, label %if.then, label %if.else |
| |
| if.then: ; preds = %entry |
| %2 = load i32, ptr %b.addr, align 4 |
| store i32 %2, ptr %retval, align 4 |
| br label %return |
| |
| if.else: ; preds = %entry |
| %3 = load i32, ptr %a.addr, align 4 |
| store i32 %3, ptr %retval, align 4 |
| br label %return |
| |
| return: ; preds = %if.else, %if.then |
| %4 = load i32, ptr %retval, align 4 |
| ret i32 %4 |
| } |
| ... |
| --- |
| name: abc |
| alignment: 16 |
| exposesReturnsTwice: false |
| legalized: false |
| regBankSelected: false |
| selected: false |
| failedISel: false |
| tracksRegLiveness: true |
| hasWinCFI: false |
| noPhis: false |
| isSSA: true |
| noVRegs: false |
| hasFakeUses: false |
| callsEHReturn: false |
| callsUnwindInit: false |
| hasEHContTarget: false |
| hasEHScopes: false |
| hasEHFunclets: false |
| isOutlined: false |
| debugInstrRef: true |
| failsVerification: false |
| tracksDebugUserValues: false |
| registers: |
| - { id: 0, class: gr32, preferred-register: '', flags: [ ] } |
| - { id: 1, class: gr32, preferred-register: '', flags: [ ] } |
| - { id: 2, class: gr32, preferred-register: '', flags: [ ] } |
| - { id: 3, class: gr32, preferred-register: '', flags: [ ] } |
| - { id: 4, class: gr32, preferred-register: '', flags: [ ] } |
| - { id: 5, class: gr32, preferred-register: '', flags: [ ] } |
| liveins: |
| - { reg: '$edi', virtual-reg: '%0' } |
| - { reg: '$esi', virtual-reg: '%1' } |
| frameInfo: |
| isFrameAddressTaken: false |
| isReturnAddressTaken: false |
| hasStackMap: false |
| hasPatchPoint: false |
| stackSize: 0 |
| offsetAdjustment: 0 |
| maxAlignment: 4 |
| adjustsStack: false |
| hasCalls: false |
| stackProtector: '' |
| functionContext: '' |
| maxCallFrameSize: 4294967295 |
| cvBytesOfCalleeSavedRegisters: 0 |
| hasOpaqueSPAdjustment: false |
| hasVAStart: false |
| hasMustTailInVarArgFunc: false |
| hasTailCall: false |
| isCalleeSavedInfoValid: false |
| localFrameSize: 0 |
| fixedStack: [] |
| stack: |
| - { id: 0, name: retval, type: default, offset: 0, size: 4, alignment: 4, |
| stack-id: default, callee-saved-register: '', callee-saved-restored: true, |
| debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } |
| - { id: 1, name: a.addr, type: default, offset: 0, size: 4, alignment: 4, |
| stack-id: default, callee-saved-register: '', callee-saved-restored: true, |
| debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } |
| - { id: 2, name: b.addr, type: default, offset: 0, size: 4, alignment: 4, |
| stack-id: default, callee-saved-register: '', callee-saved-restored: true, |
| debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } |
| entry_values: [] |
| callSites: [] |
| debugValueSubstitutions: [] |
| constants: [] |
| machineFunctionInfo: |
| amxProgModel: None |
| body: | |
| bb.0.entry: |
| successors: %bb.1(0x40000000), %bb.2(0x40000000) |
| liveins: $edi, $esi |
| |
| %1:gr32 = COPY $esi |
| %0:gr32 = COPY $edi |
| MOV32mr %stack.1.a.addr, 1, $noreg, 0, $noreg, %0 :: (store (s32) into %ir.a.addr) |
| MOV32mr %stack.2.b.addr, 1, $noreg, 0, $noreg, %1 :: (store (s32) into %ir.b.addr) |
| %2:gr32 = SUB32rr %0, %1, implicit-def $eflags |
| JCC_1 %bb.2, 14, implicit $eflags |
| JMP_1 %bb.1 |
| |
| bb.1.if.then: |
| successors: %bb.3(0x80000000) |
| |
| %4:gr32 = MOV32rm %stack.2.b.addr, 1, $noreg, 0, $noreg :: (dereferenceable load (s32) from %ir.b.addr) |
| MOV32mr %stack.0.retval, 1, $noreg, 0, $noreg, killed %4 :: (store (s32) into %ir.retval) |
| JMP_1 %bb.3 |
| |
| bb.2.if.else: |
| successors: %bb.3(0x80000000) |
| |
| %3:gr32 = MOV32rm %stack.1.a.addr, 1, $noreg, 0, $noreg :: (dereferenceable load (s32) from %ir.a.addr) |
| MOV32mr %stack.0.retval, 1, $noreg, 0, $noreg, killed %3 :: (store (s32) into %ir.retval) |
| |
| bb.3.return: |
| %5:gr32 = MOV32rm %stack.0.retval, 1, $noreg, 0, $noreg :: (dereferenceable load (s32) from %ir.retval) |
| $eax = COPY %5 |
| RET 0, $eax |
| ... |
| |
| # CHECK: Machine basic block vectors: |
| # CHECK-NEXT: Machine basic block: abc:entry: |
| # CHECK-NEXT: [ 23.60 24.20 24.80 ] |
| # CHECK-NEXT: Machine basic block: abc:if.then: |
| # CHECK-NEXT: [ 7.30 7.60 7.90 ] |
| # CHECK-NEXT: Machine basic block: abc:if.else: |
| # CHECK-NEXT: [ 3.40 3.60 3.80 ] |
| # CHECK-NEXT: Machine basic block: abc:return: |
| # CHECK-NEXT: [ 8.80 9.10 9.40 ] |