{
        struct bpf_verifier_state *vstate = env->cur_state;
        struct bpf_func_state *state = vstate->frame[vstate->curframe];
-       struct bpf_reg_state *regs = state->regs;
+       struct bpf_reg_state *reg, *regs = state->regs;
 
        if (regno >= MAX_BPF_REG) {
                verbose(env, "R%d is invalid\n", regno);
                return -EINVAL;
        }
 
+       reg = ®s[regno];
        if (t == SRC_OP) {
                /* check whether register used as source operand can be read */
-               if (regs[regno].type == NOT_INIT) {
+               if (reg->type == NOT_INIT) {
                        verbose(env, "R%d !read_ok\n", regno);
                        return -EACCES;
                }
                /* We don't need to worry about FP liveness because it's read-only */
-               if (regno != BPF_REG_FP)
-                       return mark_reg_read(env, ®s[regno],
-                                            regs[regno].parent);
+               if (regno == BPF_REG_FP)
+                       return 0;
+
+               return mark_reg_read(env, reg, reg->parent);
        } else {
                /* check whether register used as dest operand can be written to */
                if (regno == BPF_REG_FP) {
                        verbose(env, "frame pointer is read only\n");
                        return -EACCES;
                }
-               regs[regno].live |= REG_LIVE_WRITTEN;
+               reg->live |= REG_LIVE_WRITTEN;
                if (t == DST_OP)
                        mark_reg_unknown(env, regs, regno);
        }